首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSON 陣列解析:FastJSON 篩選特定 type 下的 categories 子資料

     編輯:程式設計綜合問答

資料結構

JSON 陣列,每個物件含 `code`, `name`, `type`, `categories` (子陣列)。需篩選 `type == "2"` (電費繳納) 的物件,取其 `categories` 所有元素。

FastJSON 完整程式碼


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JsonFilterDemo {
    public static void main(String[] args) {
        String jsonStr = "[{\"code\":\"I1_5200\",\"name\":\"移動繳費\",\"type\":\"4\",...}, ...]"; // 原始長字串

        JSONArray array = JSON.parseArray(jsonStr);
        for (int i = 0; i < array.size(); i++) {
            JSONObject obj = array.getJSONObject(i);
            String type = obj.getString("type");
            if ("2".equals(type)) { // 目標 type
                JSONArray categories = obj.getJSONArray("categories");
                for (int j = 0; j < categories.size(); j++) {
                    JSONObject cat = categories.getJSONObject(j);
                    System.out.println("code: " + cat.getString("code"));
                    System.out.println("name: " + cat.getString("name"));
                    // 可進一步封裝為 DTO List
                }
                break; // 假設 type 唯一,找到即跳出
            }
        }
    }
}

Java 8 Stream 寫法 (更優雅)


List result = JSON.parseArray(jsonStr, JSONObject.class).stream()
    .filter(o -> "2".equals(o.getString("type")))
    .findFirst()
    .map(o -> o.getJSONArray("categories"))
    .map(arr -> arr.toJavaList(Category.class))
    .orElse(Collections.emptyList());

其他庫對照

  • Jackson:** `ObjectMapper().readTree(jsonStr)` → `JsonNode` 遍歷,效能最強、記憶體佔用低。
  • Gson:** `new Gson().fromJson(jsonStr, CategoryWrapper[].class)` → 物件陣列,類型安全。
  • org.json (內建):** `new JSONArray(jsonStr)` → 極簡但功能弱、效能差。

建議:專案已用 FastJSON 繼續用;新專案優先 Jackson 或 Gson,避開 FastJSON 歷史安全漏洞。

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