Jackson 以高效能、低依賴、API 簡潔著稱,支援 Java Bean、Map、List、陣列、泛型集合與 XML 互轉。
<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-all</artifactId><version>1.7.6</version></dependency> <!-- XML 需額外 --> <dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-xml</artifactId><version>1.7.6</version></dependency>
ObjectMapper:JSON 序列化/反序列化入口。JsonGenerator:流式寫入 JSON,適合大物件或輸出流直連。XmlMapper:XML 專用 Mapper (需 stax2-api.jar)。ObjectMapper mapper = new ObjectMapper(); // Bean mapper.writeValue(System.out, user); // Map Mapmap = new HashMap<>(); map.put("user", user); mapper.writeValue(System.out, map); // List List list = Arrays.asList(user1, user2); String json = mapper.writeValueAsString(list); // 直接得字串 // 手動構建複雜 JSON (JsonGenerator) JsonGenerator jg = mapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8); jg.writeStartObject(); jg.writeStringField("name", "Jackson"); jg.writeArrayFieldStart("tags"); jg.writeString("java"); jg.writeString("json"); jg.writeEndArray(); jg.writeEndObject(); jg.flush();
// Bean User u = mapper.readValue(jsonStr, User.class); // List(需 JavaType 擷取泛型) JavaType type = mapper.getTypeFactory().constructParametricType(List.class, User.class); List list = mapper.readValue(jsonStr, type); // Map JavaType mapType = mapper.getTypeFactory().constructParametricType(Map.class, String.class, User.class); Map map = mapper.readValue(jsonStr, mapType); // 陣列 (避免類型擦除) User[] arr = mapper.readValue(jsonStr, User[].class);
XmlMapper xmlMapper = new XmlMapper(); String xml = xmlMapper.writeValueAsString(user); // Bean -> XML User u = xmlMapper.readValue(xmlStr, User.class); // XML -> Bean
注意:Jackson 1.x XML 輸出根節點預設為 <unknown>,可透過 @JsonRootName 或自訂 SerializationConfig 改善;2.x (FasterXML) 已大幅增強 XML 支援,建議新專案直接使用 2.x 版本。