1. 概述
JSON 是一种轻量级、语言无关的数据交换格式,广泛应用于客户端与服务端之间的通信。
在大多数 JSON 处理库中,JSONObject
和 JSONArray
是两个核心类。✅
JSONObject
存储的是无序的键值对,类似于 Java 中的Map
实现;- 而
JSONArray
则是一个有序的值序列,类似 Java 中的List
或Vector
。
本文将使用 JSON-Java(org.json) 库,讲解如何从 JSONArray
中提取指定 key 对应的所有 value。如果你还不熟悉这个库,可以先参考这篇入门指南。
2. Maven 依赖
首先,在你的 pom.xml
文件中添加如下依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
你可以随时在 Maven Central 上查看最新版本。
3. 数据结构准备
JSON 消息通常由嵌套的 JSON 对象和数组组成。
JSONArray
使用方括号[]
包裹;JSONObject
使用花括号{}
包裹。
举个例子,如下 JSON:
[
{
"name": "John",
"city": "chicago",
"age": "22"
},
{
"name": "Gary",
"city": "florida",
"age": "35"
},
{
"name": "Selena",
"city": "vegas",
"age": "18"
}
]
这是一个包含多个 JSON 对象的数组,每个对象代表一个客户记录,包含 name
、city
和 age
三个字段。
4. 处理 JSONArray:提取指定 key 的所有值
如果我们想知道所有客户的姓名(即提取 key 为 "name"
的所有值),该怎么操作?
由于 JSONArray
是一个 JSONObject
的列表,我们可以这样写:
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());
}
这段代码的逻辑如下:
✅ 遍历 JSONArray
中的所有对象;
✅ 对每个 JSONObject
,调用 optString(key)
获取指定 key 的字符串值;
⚠️ 如果 key 不存在,optString()
会返回空字符串(而不是抛异常)。
调用 getValuesForGivenKey(jsonArrayStr, "name")
后,输出将是:
[John, Gary, Selena]
5. 小结
这篇文章简要介绍了如何使用 org.json
库从 JSONArray
中提取指定 key 的所有值。
当然,Java 中处理 JSON 的库还有很多,比如 JSON.simple 也是一个非常不错的选择,感兴趣的话可以自行探索。
完整代码示例已上传至 GitHub。