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

Jackson 處理複雜物件集合轉換的多種場景實戰

     編輯:Java 相關知識

Jackson 是 Java 生態中效能最強、依賴最少的 JSON 庫。本文針對四種常見複雜場景給出標準轉換代碼:單一物件、List 集合、物件內含集合、集合內物件再含集合。

核心 API

  • ObjectMapper.readValue(json, Class<T>):簡單物件/陣列轉換。
  • ObjectMapper.readValue(json, JavaType):泛型集合轉換關鍵,透過 TypeFactory.constructParametricType(List.class, ElementClass) 建立帶泛型資訊的 JavaType。

場景代碼示範

ObjectMapper mapper = new ObjectMapper();

// 1. JSON -> 單一物件
String json1 = "{\"UserID\":1,\"LoginName\":\"唐工\"...}";
User u = mapper.readValue(json1, User.class);

// 2. JSON -> List
String json2 = "[{\"UserID\":1,...}]";
JavaType listType = mapper.getTypeFactory().constructParametricType(List.class, User.class);
List list = mapper.readValue(json2, listType);

// 3. JSON -> 物件內含集合 (User 包含 List)
String json3 = "{\"UserID\":1,...,\"RoleList\":[{\"Roleid\":0,...}]}";
User u3 = mapper.readValue(json3, User.class); // 直接支援巢狀集合

// 4. JSON -> 集合內物件再含集合
String json4 = "[{\"UserID\":1,...,\"RoleList\":[...]}, {\"UserID\":2,...}]";
JavaType complexType = mapper.getTypeFactory().constructParametricType(List.class, User.class);
List complexList = mapper.readValue(json4, complexType);

關鍵點提醒

  1. 實體類必須提供無參建構子、Getter/Setter,集合屬性建議宣告為 List<ConcreteClass> 而非介面,利於 Jackson 反序列化時確定具體類型。
  2. 若 JSON 欄位名與 Java 屬性名不符,可加 @JsonProperty("fieldName") 映射。
  3. 日期、Enum 等特殊類型可註冊自訂 JsonSerializer/Deserializer 或模組 (如 JavaTimeModule)。

流式處理大數據

對於超大 JSON,可使用 JsonParser 逐 Token 解析,避免一次性載入記憶體,範例中 jsonStreamConverObject 示範了透過 InputStreamReader 流式讀取並轉換。

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