Zson 是一個輕量、高效能的 Java JSON 庫(專案主頁:GitHub),特點:
TypeReference 機制)。<dependency>
<groupId>org.zson</groupId>
<artifactId>zson</artifactId>
<version>1.5.0</version> <!-- 請查 GitHub 最新版 -->
</dependency>
import org.zson.JsonSerializer;
import java.util.*;
List<SomeBean> list = new ArrayList<>();
// ... 填充資料 ...
String json = new JsonSerializer()
.prettyFormat(2) // 縮排 2 空格,易讀
.ignoreNull(false) // true=忽略 null 欄位,false=保留 "field":null
.dateFormat("yyyy-MM-dd") // java.util.Date/Calendar 格式化
.serialize(list);
System.out.println(json);
import org.zson.JsonDeserializer;
import org.zson.TypeReference;
import java.lang.reflect.Type;
import java.util.List;
// 關鍵:TypeReference 捕獲泛型型別資訊(避免類型擦除)
Type type = new TypeReference<List<SomeBean>>() {}.getType();
List<SomeBean> result = (List<SomeBean>) new JsonDeserializer()
.deserialize(json, type);
// 序列化
SomeBean bean = new SomeBean("test", 123);
String json = new JsonSerializer().serialize(bean);
// 反序列化
SomeBean bean2 = new JsonDeserializer().deserialize(json, SomeBean.class);
import java.util.List;
import java.util.ArrayList;
import java.lang.reflect.Type;
import org.zson.JsonSerializer;
import org.zson.TypeReference;
import org.zson.JsonDeserializer;
import test.bean.SomeBean;
public class TestZson {
public static void main(String[] args) {
// 1. 準備資料
List<SomeBean> list = new ArrayList<>();
list.add(new SomeBean("Alice", 25));
list.add(new SomeBean("Bob", 30));
// 2. 序列化
String json = new JsonSerializer()
.prettyFormat(2)
.ignoreNull(false)
.dateFormat("yyyy-MM-dd HH:mm:ss")
.serialize(list);
System.out.println("JSON 輸出:\n" + json);
// 3. 反序列化
Type type = new TypeReference<List<SomeBean>>() {}.getType();
List<SomeBean> result = (List<SomeBean>) new JsonDeserializer().deserialize(json, type);
// 4. 驗證
result.forEach(b -> System.out.println("還原:" + b.getName() + ", " + b.getAge()));
}
}
| 方法 | 說明 | 預設值 |
|---|---|---|
prettyFormat(int indent) | 輸出美化縮排空格數,0=緊湊模式 | 0 |
ignoreNull(boolean) | true=跳過 null 值欄位,false=輸出 "field":null | true |
dateFormat(String pattern) | 日期格式模式(SimpleDateFormat 相容) | 時間戳毫秒數 |
excludeFields(Field...) | 排除指定欄位(靜態/瞬態自動跳過) | - |
includeFields(Field...) | 僅包含指定欄位(白名單) | - |
serializeNulls(boolean) | 同 ignoreNull 反向 | - |
| 特性 | Zson | Gson | Jackson | Fastjson |
|---|---|---|---|---|
| JAR 大小 | ~100KB | ~250KB | ~600KB (core) | ~400KB |
| 泛型反序列化 | TypeReference | TypeToken | TypeReference | TypeReference |
| 流式 API | 否 | 是 | 是 | 是 |
| 註解驅動 | 有限 | @SerializedName 等 | 豐富 @JsonProperty | @JSONField |
| 效能 | 中等 | 優 | 極優 | 極優 |
| 維護狀態 | 社區較小 | Google 積極 | 紅帽/社區積極 | 阿里/社區 |
ObjectMapper,無需額外依賴。List.class 會導致反序列化為 List<LinkedHashMap>,必須用 TypeReference。java.time.LocalDateTime (JDK 8+) 需確認庫版本支援,否則統一用 java.util.Date 或字串傳輸。transient/排除欄位。Zson 以極簡 API、零依賴、泛型友善定位輕量級 JSON 處理場景。核心用法只有兩行:new JsonSerializer().serialize(obj) 與 new JsonDeserializer().deserialize(json, typeRef.getType())。掌握 TypeReference 捕獲泛型是關鍵。生產環境高併發/大數據場景建議遷移至 Jackson,但 Zson 仍是中小專案、單元測試、腳本工具的優秀選擇。