1. Introduction

Managing and updating JSON data is a common requirement in modern software development. JSON (JavaScript Object Notation) is widely used for data interchange between applications.

In this tutorial, we’ll explore various methods to update values within JSON arrays using different Java libraries, specifically focusing on org.json (which includes the JSONArray class), Google Gson, and Jackson.

2. Using org.json Library

The org.json library offers a straightforward approach to JSON manipulation. Let’s start by creating and verifying a JSON array:

@Test
public void givenJSONArray_whenUsingOrgJson_thenArrayCreatedAndVerified() {
    JSONArray jsonArray = new JSONArray().put("Apple").put("Banana").put("Cherry");

    assertEquals("[\"Apple\",\"Banana\",\"Cherry\"]", jsonArray.toString());
}

In this example, we first create a JSONArray and populate it with three elements: “Apple“, “Banana“, and “Cherry“. Furthermore, we utilize the put() method to add these elements to the array. Finally, we confirm that our jsonArray matches our expected output.

Next, let’s now see how to read and update an existing JSON array:

@Test
public void givenJSONArray_whenUsingOrgJson_thenArrayReadAndUpdated() {
    JSONArray jsonArray = new JSONArray("[\"Apple\",\"Banana\",\"Cherry\"]");

    jsonArray.put(1, "Blueberry");
    assertEquals("[\"Apple\",\"Blueberry\",\"Cherry\"]", jsonArray.toString());
}

This test demonstrates how to read an existing JSON array string into a JSONArray object and then change the value at index one from “Banana” to “Blueberry” using the put() method.

3. Using Google Gson Library

Google Gson also provides a rich set of features for JSON manipulation. First, let’s create JSON array with Gson:

@Test
public void givenJsonArray_whenUsingGson_thenArrayCreatedAndVerified() {
    JsonArray jsonArray = new JsonArray();
    jsonArray.add(new JsonPrimitive("Apple"));
    jsonArray.add(new JsonPrimitive("Banana"));
    jsonArray.add(new JsonPrimitive("Cherry"));

    assertEquals("[\"Apple\",\"Banana\",\"Cherry\"]", jsonArray.toString());
}

Here, we create a JsonArray and add our elements by wrapping each item in a JsonPrimitive. This is necessary because the add() method of JsonArray requires JsonElement instances, and JsonPrimitive is a subclass of JsonElement.

Next, we’ll explore how to read an existing JSON array and update one of its values using Gson:

@Test
public void givenJsonArray_whenUsingGson_thenArrayReadAndUpdated() {
    JsonArray jsonArray = JsonParser.parseString("[\"Apple\",\"Banana\",\"Cherry\"]")
      .getAsJsonArray();

    jsonArray.set(1, new JsonPrimitive("Blueberry"));
    assertEquals("[\"Apple\",\"Blueberry\",\"Cherry\"]", jsonArray.toString());
}

In this test, we utilize the set() method of JsonArray to again update the value at index one from “Banana” to “Blueberry”. The new value must also be wrapped in a JsonPrimitive.

4. Using Jackson Library

Jackson is a powerful library for JSON processing in Java. It provides advanced features for data binding and JSON manipulation. We’ll start by creating a JSON array:

@Test
public void givenArrayNode_whenUsingJackson_thenArrayCreatedAndVerified() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    ArrayNode arrayNode = mapper.createArrayNode().add("Apple").add("Banana").add("Cherry");

    assertEquals("[\"Apple\",\"Banana\",\"Cherry\"]", arrayNode.toString());
}

We create an ArrayNode and then add our elements directly to it. The add() method of ArrayNode can accept various input types, including strings.

Additionally, let’s see how to read and update an existing JSON array using Jackson*:*

@Test
public void givenArrayNode_whenUsingJackson_thenArrayReadAndUpdated() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    ArrayNode arrayNode = (ArrayNode) mapper.readTree("[\"Apple\",\"Banana\",\"Cherry\"]");

    arrayNode.set(1, "Blueberry");
    assertEquals("[\"Apple\",\"Blueberry\",\"Cherry\"]", arrayNode.toString());
}

This test demonstrates reading a JSON array into an ArrayNode and updating the value at index one from “Banana” to “Blueberry“. Finally, we use the set() method to directly replace the value with a String, and Jackson automatically handles the conversion to a TextNode internally.

5. Conclusion

Updating values in a JSON array is a common task when working with JSON data in Java. Whether we’re using org.json, Google Gson, or Jackson, each library provides a reliable method to achieve this.

As always, the complete code samples for this article can be found over on GitHub.