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:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
We can always find out the latest version of JSON-Java on Maven Central.
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:
[
{
"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?
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))
.collect(Collectors.toList());
}
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:
[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.