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

Gson 將 Map 轉為 JSON 字串完整範例

     編輯:Java 相關知識

Google Gson 庫快速上手:Map ⇄ JSON 互轉

Gson 是 Google 開源的 Java JSON 庫,API 簡潔、支援泛型、預設處理 `null` 值,適合快速序列化/反序列化。

Maven 依賴

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 請用最新版 -->
</dependency>

Map 轉 JSON 工具方法

import com.google.gson.Gson;
import java.util.Map;

public class GsonUtil {
    private static final Gson GSON = new Gson(); // 執行緒安全,可重用

    /** Map → JSON 字串 */
    public static <T> String toJson(Map<String, T> map) {
        return GSON.toJson(map);
    }

    /** JSON 字串 → Map (需 TypeToken 處理泛型) */
    public static <T> Map<String, T> fromJson(String json, Class<T> valueType) {
        return GSON.fromJson(json, new com.google.gson.reflect.TypeToken<Map<String, T>>() {}.getType());
    }
}

使用範例

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        Map<String, Object> data = new LinkedHashMap<>(); // 保持插入順序
        data.put("id", 1001);
        data.put("name", "張三");
        data.put("roles", Arrays.asList("admin", "user"));
        data.put("active", true);
        data.put("score", null); // Gson 預設輸出 null

        String json = GsonUtil.toJson(data);
        System.out.println(json);
        // {"id":1001,"name":"張三","roles":["admin","user"],"active":true,"score":null}

        // 反序列化
        Map<String, Object> parsed = GsonUtil.fromJson(json, Object.class);
        System.out.println(parsed.get("name")); // 張三
    }
}

常用配置選項

Gson gson = new GsonBuilder()
    .setPrettyPrinting()           // 格式化輸出(開發/除錯用)
    .serializeNulls()              // 輸出 null 欄位(預設已開啟)
    .disableHtmlEscaping()         // 不轉義 HTML 特殊字元 (< > &)
    .setDateFormat("yyyy-MM-dd HH:mm:ss") // 日期格式
    .create();

進階技巧

  • 排除欄位:使用 `@Expose` 註解 + `excludeFieldsWithoutExposeAnnotation()`。
  • 自訂序列化:實作 `JsonSerializer` / `JsonDeserializer` 註冊給 `GsonBuilder`。
  • 泛型保留:反序列化時必須使用 `TypeToken` 捕獲完整泛型資訊,否則會變成 `LinkedTreeMap`。

線上工具推薦

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