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

Java 解析多層 JSON 資料的兩種實用方法

     編輯:Java 程式設計入門

前言

在 Java 開發中,處理巢狀結構的 JSON 資料是常見需求。本文介紹兩種主流解析方式:使用原生 org.json 逐層解析,以及利用 Google Gson 庫自動映射到遞迴物件模型。兩種方法各有優劣,開發者可根據專案需求選擇。

方法一:使用 org.json 逐層解析

此方式適合簡單結構或動態解析場景,需手動遍歷 JSON 物件層級。

import org.json.JSONObject;

String jsonStr = "{'name':'111','child':[{'name':'222','child':[{'name':'333'}]},{'name':'2221'}]}";
JSONObject json = new JSONObject(jsonStr);
// 逐層獲取值
String name = json.getString("name");
JSONArray children = json.getJSONArray("child");
// 遞迴處理 child 陣列...

優點:無額外依賴,靈活控制解析邏輯。缺點:程式碼冗長,維護成本高,易出錯。

方法二:Gson 自動映射遞迴物件(推薦)

定義包含自我引用的 MyObject 類別,Gson 即可一次完成反序列化。

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

public class MyObject {
    private String name;
    private List<MyObject> child;

    // Getter/Setter 省略
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public List<MyObject> getChild() { return child; }
    public void setChild(List<MyObject> child) { this.child = child; }

    public static void main(String[] args) {
        String jsonStr = "{'name':'111','child':[{'name':'222','child':[{'name':'333'}]},{'name':'2221'}]}";
        Gson gson = new Gson();
        MyObject obj = gson.fromJson(jsonStr, MyObject.class);
        
        // 驗證解析結果
        System.out.println(obj.getChild().get(0).getName());           // 222
        System.out.println(obj.getChild().get(1).getName());           // 2221
        System.out.println(obj.getChild().get(0).getChild().get(0).getName()); // 333
    }
}

優點:程式碼簡潔,型別安全,自動處理任意深度巢狀結構。缺點:需引入 Gson 依賴,對極其複雜的動態結構較不靈活。

最佳實踐建議

  • 固定結構、深度未知的 JSON:首選 Gson 遞迴映射
  • 高度動態、結構不固定的 JSON:考慮 org.json 或 Jackson JsonNode
  • 效能敏感場景:可比較 Gson、Jackson、Fastjson 基準測試後決定

總結

Gson 的遞迴物件映射極大簡化了多層 JSON 處理,是現代 Java 開發的首選方案。掌握兩種方法,能靈活應對各類 JSON 解析挑戰。

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