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

Java JSON 庫 Zson 使用指南:序列化、反序列化、日期格式化與泛型支援完整教學

     編輯:Java 程式設計入門

Zson 簡介

Zson 是一個輕量、高效能的 Java JSON 庫(專案主頁:GitHub),特點:

  • 零依賴、JAR 體積極小(~100KB)。
  • 支援泛型完整反序列化(TypeReference 機制)。
  • 靈活配置:縮排美化、Null 處理、日期格式、欄位過濾。
  • API 設計簡潔,類似 Gson/Jackson 風格。

Maven 依賴

<dependency>
    <groupId>org.zson</groupId>
    <artifactId>zson</artifactId>
    <version>1.5.0</version> <!-- 請查 GitHub 最新版 -->
</dependency>

核心 API 快速上手

1. 序列化:Java 物件 → JSON 字串

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);

2. 反序列化:JSON 字串 → Java 物件(含泛型)

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);

3. 單一物件序列化/反序列化

// 序列化
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":nulltrue
dateFormat(String pattern)日期格式模式(SimpleDateFormat 相容)時間戳毫秒數
excludeFields(Field...)排除指定欄位(靜態/瞬態自動跳過)-
includeFields(Field...)僅包含指定欄位(白名單)-
serializeNulls(boolean)同 ignoreNull 反向-

與主流 JSON 庫對比

特性ZsonGsonJacksonFastjson
JAR 大小~100KB~250KB~600KB (core)~400KB
泛型反序列化TypeReferenceTypeTokenTypeReferenceTypeReference
流式 API否是是是
註解驅動有限@SerializedName 等豐富 @JsonProperty@JSONField
效能中等優極優極優
維護狀態社區較小Google 積極紅帽/社區積極阿里/社區

選型建議

  • Spring Boot 專案:內建 Jackson,直接用 ObjectMapper,無需額外依賴。
  • Android / 體積敏感:Gson 或 Moshi(Kotlin 友善)。
  • 高效能/大數據:Jackson (後端)、Fastjson (舊專案)。
  • 輕量/簡單專案/學習:Zson API 直觀,適合快速原型。

常見坑點

  • 泛型擦除:直接傳 List.class 會導致反序列化為 List<LinkedHashMap>,必須用 TypeReference。
  • 日期類型:java.time.LocalDateTime (JDK 8+) 需確認庫版本支援,否則統一用 java.util.Date 或字串傳輸。
  • 循環引用:Zson 預設不處理循環引用,實體類設計時避免雙向關聯或加 transient/排除欄位。

總結

Zson 以極簡 API、零依賴、泛型友善定位輕量級 JSON 處理場景。核心用法只有兩行:new JsonSerializer().serialize(obj) 與 new JsonDeserializer().deserialize(json, typeRef.getType())。掌握 TypeReference 捕獲泛型是關鍵。生產環境高併發/大數據場景建議遷移至 Jackson,但 Zson 仍是中小專案、單元測試、腳本工具的優秀選擇。

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