1. 簡介
管理和更新 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() 方法將索引為“one”的值從“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 的子類。
接下來,我們將探討如何讀取現有 JSON 數組並使用 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());
}在本測試中,我們使用 set() 方法對 JsonArray 進行更新,將索引值為一的值從 “Banana” 更改為 “Blueberry”。 新值也必須包含在 JsonPrimitive 中。
4. 使用 Jackson 庫
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. 結論
更新 JSON 數組中的值是處理 Java 中 JSON 數據時常見的任務。無論我們使用 org.json、Google Gson 還是 Jackson,每種庫都提供了一種可靠的方法來實現此目的。