1. 概述

JSON 是一种轻量级、语言无关的数据交换格式,广泛应用于客户端与服务端之间的通信。

在大多数 JSON 处理库中,JSONObjectJSONArray 是两个核心类。✅

  • JSONObject 存储的是无序的键值对,类似于 Java 中的 Map 实现;
  • JSONArray 则是一个有序的值序列,类似 Java 中的 ListVector

本文将使用 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 对象的数组,每个对象代表一个客户记录,包含 namecityage 三个字段。

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


原始标题:Get a Value by Key in a JSONArray

« 上一篇: Scala 语言入门
» 下一篇: EnumMap 使用指南