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

JSON 核心結構:JSONObject 與 JSONArray 的區別、關聯與解析實戰

     編輯:程式設計綜合問答

核心區別一覽

特性JSONObjectJSONArray
對應 JSON 結構對象 { ... }數組 [ ... ]
數據模型鍵值對集合 (Map<String, Object>)有序列表 (List<Object>)
典型場景單個實體 (用戶、訂單、配置)列表數據 (商品列表、日誌、坐標點)
訪問方式getString("key")getJSONObject(index)

實例對比

單商品對象 → JSONObject

{
  "id": 1001,
  "name": "iPhone 15",
  "price": 5999,
  "tags": ["5G", "A17", "Dynamic Island"]
}

商品列表 → JSONArray

[
  {"id": 1001, "name": "iPhone 15", "price": 5999},
  {"id": 1002, "name": "iPhone 15 Pro", "price": 7999},
  {"id": 1003, "name": "iPhone 15 Plus", "price": 6999}
]

嵌套關係:對象包含數組、數組包含對象

{
  "category": "手機",
  "page": 1,
  "pageSize": 20,
  "total": 100,
  "list": [          // ← JSONArray
    {"id": 1001, ...}, // ← JSONObject
    {"id": 1002, ...}
  ]
}

解析路徑:jsonObject.getJSONArray("list").getJSONObject(0).getString("name")

Java 解析實戰

依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.40</version>
</dependency>

實體類映射 (推薦)

@Data
public class Product {
    private Long id;
    private String name;
    private BigDecimal price;
    private List tags;
}

@Data
public class PageResult {
    private String category;
    private int page;
    private int pageSize;
    private long total;
    private List list;  // ← 這裡是 List,框架自動處理 JSONArray→List
}

一鍵反序列化

String json = "..."; // 上述嵌套 JSON
PageResult result = JSON.parseObject(json, 
    new TypeReference>() {});

// 使用
result.getList().forEach(p -> System.out.println(p.getName()));

手動節點遍歷 (無實體類場景)

JSONObject root = JSON.parseObject(json);
JSONArray list = root.getJSONArray("list");
for (int i = 0; i < list.size(); i++) {
    JSONObject item = list.getJSONObject(i);
    String name = item.getString("name");
    BigDecimal price = item.getBigDecimal("price");
    // ...
}

常見坑點

  • 類型不匹配:getInt("price") 但 JSON 是字符串 "5999" → 用 getBigDecimal 或 getString 再轉。
  • 空值處理:getJSONObject("optional") 可能返回 null → 先 containsKey 判斷。
  • 大數字精度:Long/BigDecimal 避免 double 精度丟失。

總結

大括號 { } → JSONObject (Map),中括號 [ ] → JSONArray (List)。實際開發**優先定義實體類配合反序列化框架**,手動節點遍歷僅用於動態結構場景。

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