Get a Value by Key in a JSONArray – 在JSONArray中按键获取一个值

最后修改: 2018年 10月 28日

1. Overview


JSON is a light-weight and language independent data-interchange format used for most client-server communications.


JSONObject and JSONArray are the two common classes usually available in most of the JSON processing libraries. A JSONObject stores unordered key-value pairs, much like a Java Map implementation. A JSONArray, on the other hand, is an ordered sequence of values much like a List or a Vector in Java.


In this tutorial, we’ll be using JSON-Java (org.json) library and learn how to process a JSONArray to extract value for a given key. If needed, we have available an introduction to this library.


2. Maven Dependency


We’ll first start by adding the below dependency in our POM:



We can always find out the latest version of JSON-Java on Maven Central.

我们可以随时在Maven Central上查到JSON-Java的最新版本。

3. Context Buildup


A JSON message is usually comprised of JSON objects and arrays which may be nested inside one another. A JSONArray object is enclosed within square brackets [ ] whereas a JSONObject is enclosed within curly braces {}. For instance, let’s consider this JSON message:

一个JSON信息通常由JSON对象和数组组成,它们可以相互嵌套。一个JSONArray对象被括在方括号内 [ ],而一个JSONObject被括在大括号内{}。例如,让我们考虑这个JSON信息。

        "name": "John",
        "city": "chicago",
        "age": "22"
        "name": "Gary",
        "city": "florida",
        "age": "35"
        "name": "Selena",
        "city": "vegas",
        "age": "18"

Clearly, it’s an array of JSON objects. Each JSON object in this array represents our customer record having a name, age, and city as its attributes or keys.


4. Processing JSONArray


Given the above JSON, what if we wish to find out the names of all our customers? In other words, given a key, “name” in our example, how can we go about finding all the values mapped to that key in a given JSON array?

鉴于上述JSON,如果我们希望找出我们所有客户的名字,该怎么办?换句话说,给定一个键,“name” 在我们的例子中,我们如何在给定的JSON数组中找到映射到该键的所有值?

As we know, a JSONArray is a list of JSON objects. So, let’s find all values for a given key:


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))

In the previous example:


  • Firstly, we iterate through the entire list of objects in a JSON array
  • Then for each JSONObject, we get the value mapped to the given key

Also, the method optString() returns an empty string if no such key exists.


On invoking getValuesForGivenKey(jsonArrayStr, “name”) where jsonArrayStr is our example JSON, we’ll get a List of all names as the output:

在调用getValuesForGivenKey(jsonArrayStr, “name”) 时, jsonArrayStr 是我们的示例JSON,我们将得到一个所有名字的List作为输出。

[John, Gary, Selena]

5. Conclusion


In this quick article, we learned how to parse a JSONArray to get all the mapped values for a given key. Here, we have used JSON-Java (org.json) library.


JSON.simple is yet another similar and powerful alternative for working with JSON in Java. Please feel free to explore.


As usual, the complete source code is available over on Github.