1. 概述
JSON 是一種輕量級且與語言無關的數據交換格式,廣泛用於客户端服務器之間的通信。
JSONObject 和 JSONArray 是通常在大多數 JSON 處理庫中可用的兩個常見類。JSONObject 存儲無序的鍵值對,類似於 Java 中的 Map 實現。JSONArray 則是一個有序的值序列,類似於 Java 中的 List 或 Vector。
在本教程中,我們將使用 JSON-Java (org.json) 庫,並學習如何處理 JSONArray 以提取給定鍵的值。如果需要,我們提供了一個該庫的介紹。
2. Maven 依賴
我們將首先在我們的 POM 中添加以下依賴:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>我們可以在 JSON-Java 的最新版本上找到 Maven Central。
3. 構建上下文
一個 JSON 消息通常由 JSON 對象和數組組成,這些對象和數組可能嵌套在彼此之中。<em >JSONArray</em > 對象被包含在方括號 <em >[ ]</em > 中,而 <em >JSONObject</em >> 則被包含在花括號{}` 中。例如,讓我們考慮以下 JSON 消息:
[
{
"name": "John",
"city": "chicago",
"age": "22"
},
{
"name": "Gary",
"city": "florida",
"age": "35"
},
{
"name": "Selena",
"city": "vegas",
"age": "18"
}
]顯然,這是一個包含 JSON 對象數組。數組中的每個 JSON 對象代表我們的客户記錄,其屬性或鍵包括姓名、年齡和城市。
4. 處理 JSONArray
鑑於上述 JSON 數據,如果我們想要查找所有客户的姓名,換句話説,給定一個鍵,“name”(在我們的示例中)如何在給定 JSON 數組中查找與該鍵關聯的所有值?
正如我們所知,JSONArray 是 JSON 對象列表。因此,讓我們查找給定鍵的所有值:
public List<String> getValuesForGivenKey(String jsonArrayStr, String key) {
JSONArray jsonArray = new JSONArray(jsonArrayStr);
return IntStream.range(0, jsonArray.length())
.mapToObj(index -> ((JSONObject)jsonArray.get(index)).optString(key))
.collect(Collectors.toList());
}在之前的示例中:
- 首先,我們遍歷 JSON 數組中的所有對象
- 然後,對於每個
JSONObject,我們獲取映射到給定鍵的值
此外,方法 optString() 在未找到該鍵時返回一個空字符串。
調用方法 getValuesForGivenKey(jsonArrayStr, “name”),其中 jsonArrayStr 是我們的示例 JSON,將返回一個包含所有名稱的 List。
[John, Gary, Selena]5. 結論
在本文中,我們學習瞭如何解析 JSONArray 以獲取給定鍵的所有映射值。這裏我們使用了 JSON-Java (org.json) 庫。
JSON.simple 也是另一種類似且功能強大的 Java 中處理 JSON 的替代方案。歡迎探索。