更新 JSONArray 中的值
一、簡介
管理和更新 JSON 資料是現代軟體開發中的常見要求。 JSON(JavaScript 物件表示法)廣泛用於應用程式之間的資料交換。
在本教程中,我們將探索使用不同 Java 程式庫更新 JSON 陣列中的值的各種方法,特別關注org.json (其中包括JSONArray類別)、Google Gson 和 Jackson。
2.使用org.json庫
org.json庫提供了一種簡單的 JSON 操作方法。讓我們先建立並驗證一個 JSON 陣列:
@Test
public void givenJSONArray_whenUsingOrgJson_thenArrayCreatedAndVerified() {
JSONArray jsonArray = new JSONArray().put("Apple").put("Banana").put("Cherry");
assertEquals("[\"Apple\",\"Banana\",\"Cherry\"]", jsonArray.toString());
}
在此範例中,我們首先建立一個JSONArray並用三個元素填滿它:「 Apple 」、「 Banana 」和「 Cherry 」。此外,我們利用put()方法將這些元素加入到陣列中。最後,我們確認jsonArray與我們的預期輸出相符。
接下來,讓我們看看如何讀取和更新現有的 JSON 陣列:
@Test
public void givenJSONArray_whenUsingOrgJson_thenArrayReadAndUpdated() {
JSONArray jsonArray = new JSONArray("[\"Apple\",\"Banana\",\"Cherry\"]");
jsonArray.put(1, "Blueberry");
assertEquals("[\"Apple\",\"Blueberry\",\"Cherry\"]", jsonArray.toString());
}
此測試示範如何將現有 JSON 陣列字串讀入JSONArray對象,然後使用put()方法將索引一處的值從「 Banana 」變更為「 Blueberry 」。
3.使用Google Gson庫
Google Gson 也提供了一組豐富的 JSON 操作功能。首先,讓我們使用 Gson 建立 JSON 陣列:
@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());
}
在這裡,我們創建一個JsonArray並透過將每個項目包裝在JsonPrimitive中來添加元素。這是必要的,因為JsonArray的add()方法需要JsonElement實例,而JsonPrimitive是JsonElement的子類別。
接下來,我們將探討如何使用 Gson 讀取現有 JSON 陣列並更新其值之一:
@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());
}
在這個測試中,我們利用JsonArray的set()方法再次將索引一處的值從“Banana” to “Blueberry”.新值也必須包裝在JsonPrimitive中。
4. 使用傑克遜庫
Jackson 是一個強大的 Java 中 JSON 處理庫。它提供了資料綁定和 JSON 操作的高級功能。我們首先建立一個 JSON 陣列:
@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());
}
我們建立一個ArrayNode ,然後將元素直接加入其中。 ArrayNode的add()方法可以接受各種輸入類型,包括字串。
此外,讓我們看看如何使用 Jackson 讀取和更新現有的 JSON 陣列:
@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());
}
此測試示範將 JSON 陣列讀入ArrayNode並將索引一處的值從「 Banana 」更新為「 Blueberry 」。最後,我們使用set()方法直接將值替換為String ,Jackson 會在內部自動處理到TextNode轉換。
5. 結論
在 Java 中使用 JSON 資料時,更新 JSON 陣列中的值是一項常見任務。無論我們使用org.json 、Google Gson 或 Jackson,每個庫都提供了可靠的方法來實現此目的。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。