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

Jackson 解析 JSON 實戰指南:對象、List、Map、數組雙向轉換完整示例

     編輯:Java 相關知識

Jackson 是 Java 生態中最流行的 JSON 處理庫。本文提供完整可運行示例,涵蓋實體、集合、Map、數組與 JSON 字符串的雙向轉換,及 JsonGenerator 低級 API 使用。

核心依賴

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

注:現代項目建議使用 Jackson 2.x (com.fasterxml.jackson.core)

實體類定義

public class User {
    private int uid;
    private String uname;
    private String upwd;
    private double number;
    // Getter/Setter 省略
    @Override public String toString() { ... }
}

核心轉換示例

1. 對象 ↔ JSON

ObjectMapper mapper = new ObjectMapper();
// 對象轉 JSON 字符串
String json = mapper.writeValueAsString(user);
// JSON 轉對象
User u = mapper.readValue(json, User.class);

2. List ↔ JSON 數組

List<User> list = Arrays.asList(user1, user2);
// 序列化
String json = mapper.writeValueAsString(list);
// 反序列化為 List<Map> (無泛型擦除時)
List<Map<String, Object>> listMap = mapper.readValue(json, 
    new TypeReference<List<Map<String, Object>>>() {});
// 反序列化為 User[]
User[] users = mapper.readValue(json, User[].class);

3. Map ↔ JSON 對象

Map<String, Object> map = new HashMap<>();
map.put("uid", 1);
map.put("name", "tom");
// 序列化
String json = mapper.writeValueAsString(map);
// 反序列化
Map<String, Object> result = mapper.readValue(json, 
    new TypeReference<Map<String, Object>>() {});

JsonGenerator 低級流式寫入

適用於大數據流式輸出,減少內存佔用:

JsonGenerator gen = mapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8);
gen.writeStartObject();           // {
gen.writeStringField("name", "jackson");
gen.writeBooleanField("sex", true);
gen.writeNumberField("age", 22);
gen.writeArrayFieldStart("infos"); // [
gen.writeNumber(22);
gen.writeString("this is array");
gen.writeEndArray();              // ]
gen.writeEndObject();             // }
gen.flush();

進階技巧與注意事項

  • 泛型擦除:反序列化集合時必須使用 TypeReference 或 JavaType 保留泛型信息
  • 日期處理:配置 mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"))
  • 忽略未知屬性:mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  • 格式化輸出:mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj)

完整可運行代碼結構

public class JacksonTest {
    static ObjectMapper mapper = new ObjectMapper();
    static User user = new User(5, "tom", "123", 3.44);
    
    public static void main(String[] args) throws Exception {
        // writeEntity2Json();
        // writeList2Json();
        // writeMap2Json();
        // readJson2Entity();
        // readJson2List();
        // readJson2Array();
        readJson2Map();
    }
    // 各方法實現見上...
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved