Java 處理 JSON 最常用的三個庫:JSON-lib(較舊)、Jackson(高效能、Spring Boot 預設)、Gson(Google 出品、API 簡潔)。本文以嵌套 JSON 為例,展示 Gson 的靈活取值方式。
{
"questionnaireID": "QNTest",
"answerResults": [
{"questionID":"QSTest01","anserContent":"cfb7f441-..."},
{"questionID":"QSTest03","anserContent":"6b3a9cce-...,a086331d-..."},
{"questionID":"QSTest05","anserContent":"test測試文字填空"},
{"questionID":"QSTest06","anserContent":"3"},
{"questionID":"QSTest07","anserContent":"2.2"}
]
}
import com.google.gson.*;
public class JsonParseDemo {
public static void main(String[] args) {
String json = "..."; // 上述 JSON
JsonObject root = JsonParser.parseString(json).getAsJsonObject();
// 取根節點單值
String qnId = root.get("questionnaireID").getAsString();
System.out.println("問卷ID: " + qnId);
// 取陣列並逐項解析
JsonArray answers = root.getAsJsonArray("answerResults");
for (JsonElement elem : answers) {
JsonObject obj = elem.getAsJsonObject();
String qId = obj.get("questionID").getAsString();
String content = obj.get("anserContent").getAsString();
System.out.printf("題號: %s, 回答: %s%n", qId, content);
}
}
}
| 特性 | JSON-lib | Jackson | Gson |
|---|---|---|---|
| 依賴 | ezmorph, commons-lang 等 | 無額外依賴 (core) | 無額外依賴 |
| 效能 | 一般 | 極高 (流式/樹模型) | 高 |
| API 風格 | DTO 映射 | 註解/Mapper/Tree | Tree Model / DTO |
| 適用場景 | 舊專案維護 | 高吞吐、REST API | Android、快速原型 |
JsonObject/JsonArray 走訪,再映射到 DTO。TypeAdapter (Gson) 或 JsonDeserializer (Jackson) 處理。