首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Jackson 實現 Java 物件與 JSON/XML 雙向轉換完整指南

     編輯:Java 相關知識

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)。

Java → JSON 常見場景

ObjectMapper mapper = new ObjectMapper();

// Bean
mapper.writeValue(System.out, user);

// Map
Map map = 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();

JSON → Java 反序列化

// 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);

XML 支援

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 版本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved