核心類別
Gson — 主入口,負責序列化/反序列化。
JsonParser — 將 JSON 字串解析為 JsonElement 樹。
JsonObject — 代表 JSON 物件 {...}。
JsonArray — 代表 JSON 陣列 [...]。
解析流程
- 建立
Gson 與 JsonParser 實例。
parser.parse(jsonStr) 得到 JsonElement。
- 判斷型別:
isJsonObject() 或 isJsonArray()。
- 轉型為
JsonObject 或 JsonArray。
- 遍歷陣列,用
gson.fromJson(element, Bean.class) 轉為 Java Bean。
程式碼範例
public void parseJsonArray(String strJson) {
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonElement el = parser.parse(strJson);
JsonObject jsonObj = null;
if (el.isJsonObject()) {
jsonObj = el.getAsJsonObject();
}
JsonArray jsonArray = null;
if (el.isJsonArray()) {
jsonArray = el.getAsJsonArray();
}
if (jsonArray != null) {
for (JsonElement e : jsonArray) {
JavaBeanDemo bean = gson.fromJson(e, JavaBeanDemo.class);
// 處理 bean...
}
}
}
進階技巧
- 直接用
gson.fromJson(jsonStr, TypeToken) 一步到位解析泛型集合。
- 使用
@SerializedName 映射 JSON 欄位與 Java 欄位名稱不一致的情況。
- 註冊
TypeAdapter 處理特殊型別(如 LocalDateTime)。
常見坑點
- JSON 字串為空或
null 時需防禦性檢查。
- 數字型別精度問題:大數字建議用
String 或 BigDecimal 接收。
- 日期格式預設非 ISO-8601,需自訂
GsonBuilder.setDateFormat()。