Zson 是一款輕量級 Java JSON 庫(項目地址:GitHub),提供流暢 API、日期格式化、空值控制、泛型類型引用等特性。本文展示其核心用法。
<dependency>
<groupId>org.zson</groupId>
<artifactId>zson</artifactId>
<version>1.0</version> <!-- 請查倉庫最新版 -->
</dependency>
import java.util.*;
import java.lang.reflect.Type;
import org.zson.JsonSerializer;
import org.zson.JsonDeserializer;
import org.zson.TypeReference;
import test.bean.SomeBean;
public class TestZson {
public static void main(String[] args) {
// 1. 構建測試數據
List list = new ArrayList<>();
list.add(new SomeBean("Alice", 25));
list.add(new SomeBean("Bob", 30));
// 2. 序列化:對象 → JSON 字符串
JsonSerializer serializer = new JsonSerializer()
.prettyFormat(2) // 縮進 2 空格美化
.ignoreNull(false) // 包含 null 字段
.dateFormat("yyyy-MM-dd"); // 日期格式
String json = serializer.serialize(list);
System.out.println("JSON輸出:\n" + json);
// 輸出示例:
// [
// {"name":"Alice","age":25,"birth":"1999-01-01"},
// {"name":"Bob","age":30,"birth":"1994-05-20"}
// ]
// 3. 反序列化:JSON 字符串 → 對象(關鍵:TypeReference 保留泛型)
Type type = new TypeReference>() {}.getType();
List result = (List) new JsonDeserializer().deserialize(json, type);
// 4. 驗證
for (SomeBean bean : result) {
System.out.println(bean.getName() + " - " + bean.getAge());
}
}
}
| 特性 | API | 說明 |
|---|---|---|
| 美化輸出 | .prettyFormat(indent) |
縮進空格數,調試友好 |
| 空值處理 | .ignoreNull(boolean) |
true 忽略 null,false 輸出 "null" |
| 日期格式 | .dateFormat(pattern) |
SimpleDateFormat 模式 |
| 泛型反序列化 | TypeReference<T>() {}.getType() |
解決類型擦除,獲取完整 ParameterizedType |
// 匿名內部類繼承 TypeReference,編譯器保留泛型信息
Type type = new TypeReference>() {}.getType();
// 等價於:
// ParameterizedTypeImpl(List, [Class(SomeBean)])
這是 Java 庫(Gson、Jackson、Fastjson)通用的泛型類型捕獲模式。
| 庫 | 優勢 | 適用場景 |
|---|---|---|
| Jackson | 性能最強、生態完善、模組化 | 企業級標準選擇 |
| Gson | API 簡潔、Google 維護、Android 友好 | 中小項目、Android |
| Fastjson | 國產、極速、功能豐富 | 國內高併發項目(注意歷史漏洞) |
| Zson | 輕量、流暢 API、TypeReference 內置 | 學習、輕量級項目、教學 |
Zson 以簡潔的流暢 API 和內置 TypeReference 降低泛型反序列化門檻,適合快速上手 JSON 處理。生產環境建議選用 Jackson 或 Gson,獲得更好的性能、安全性與社區支持。