主流 JSON 庫對比
| 庫 | Maven 坐標 | 特點 | 適用場景 |
| Jackson | com.fasterxml.jackson.core:jackson-databind | 效能最強、功能最全、Spring Boot 預設 | 企業級應用、高效能序列化 |
| Gson | com.google.code.gson:gson | API 簡潔、對 Kotlin 友善、Google 維護 | Android、輕量專案 |
| Fastjson | com.alibaba:fastjson2 | 國產、極速、功能豐富(v2 重寫修復安全問題) | 國內高併發系統、相容舊版遷移 |
| JSON-lib (舊) | net.sf.json-lib:json-lib | 早期常用,已停止維護 | 僅維護舊專案 |
核心 API 對照
Jackson (推薦)
ObjectMapper mapper = new ObjectMapper();
// 物件 -> JSON 字串
String json = mapper.writeValueAsString(user);
// JSON 字串 -> 物件
User user = mapper.readValue(json, User.class);
// JSON 字串 -> 泛型集合
List<User> list = mapper.readValue(json, new TypeReference<List<User>>() {});
// JSON 節點樹模型
JsonNode node = mapper.readTree(json);
String name = node.get("name").asText();
Gson
Gson gson = new Gson();
// 物件 -> JSON
String json = gson.toJson(user);
// JSON -> 物件
User user = gson.fromJson(json, User.class);
// 泛型集合
Type listType = new TypeToken<List<User>>(){}.getType();
List<User> list = gson.fromJson(json, listType);
Fastjson2
// 物件 -> JSON
String json = JSON.toJSONString(user);
// JSON -> 物件
User user = JSON.parseObject(json, User.class);
// JSON -> 集合
List<User> list = JSON.parseArray(json, User.class);
// JSONObject/JSONArray 兼容舊 API
JSONObject obj = JSON.parseObject(json);
String name = obj.getString("name");
常見進階配置
| 需求 | Jackson | Gson | Fastjson2 |
| 忽略 Null 欄位 | @JsonInclude(Include.NON_NULL) | gsonBuilder.serializeNulls() (預設不序列化 null) | SerializerFeature.WriteNulls (預設不寫) |
| 日期格式化 | @JsonFormat(pattern="yyyy-MM-dd") | gsonBuilder.setDateFormat() | JSON.toJSONString(obj, "yyyy-MM-dd") |
| 欄位重命名 | @JsonProperty("user_name") | @SerializedName("user_name") | @JSONField(name="user_name") |
| 忽略未知欄位 | @JsonIgnoreProperties(ignoreUnknown=true) | 預設忽略 | 預設忽略 |
| 循環引用處理 | @JsonManagedReference/@JsonBackReference | @Expose + 自訂策略 | SerializerFeature.DisableCircularReferenceDetect |
舊版 JSON-lib 遷移提醒
原文提到的 JSONObject.fromObject()、JSONArray.fromObject() 屬於 JSON-lib (已停維)。新專案請直接使用上述三大主流庫,避免安全漏洞與相容性問題。