| 特性 | JSONObject | JSONArray |
|---|---|---|
| 對應 JSON 結構 | 對象 { ... } | 數組 [ ... ] |
| 數據模型 | 鍵值對集合 (Map<String, Object>) | 有序列表 (List<Object>) |
| 典型場景 | 單個實體 (用戶、訂單、配置) | 列表數據 (商品列表、日誌、坐標點) |
| 訪問方式 | getString("key") | getJSONObject(index) |
{
"id": 1001,
"name": "iPhone 15",
"price": 5999,
"tags": ["5G", "A17", "Dynamic Island"]
}
[
{"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")
<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 判斷。大括號 { } → JSONObject (Map),中括號 [ ] → JSONArray (List)。實際開發**優先定義實體類配合反序列化框架**,手動節點遍歷僅用於動態結構場景。