將 JSONNode 對象轉換為 Map

Jackson,Java Map
Remote
1
08:12 PM · Nov 30 ,2025

1. 簡介

在現代軟件開發中,不同系統之間的數據交換是一個常見的需求。JSON(JavaScript Object Notation)是一種流行的數據交換格式。JSON的主要目的是高效地在網絡連接上向服務器和Web應用程序發送組織化的數據。它作為這種數據傳輸的便捷格式。

此外,JSON經常被用於Web服務和API,以提供一致且標準化的公共數據。它的靈活性使其能夠與各種編程語言、平台和技術無縫集成。

在處理JSON時,最常見的Java編程任務之一是將JSON對象(表示為JsonNode)轉換為Map結構,以便於更輕鬆地進行操作和訪問。

在接下來的教程部分,我們將探索和演示使用Jackson和Gson庫將JsonNode對象轉換為Map的兩種方法。

2. 概述

JsonNode 轉換為 Map 是一種表示 JSON 數據為具有鍵和值的結構的方式,類似於字典,其中鍵是字符串,值可以是其他 JSON 元素或基本數據類型。 具體來説,這種轉換對開發者特別有用,因為它允許他們使用熟悉的 Java MapList 接口來處理 JSON 數據,使數據操作更直觀和易於理解。

在我們的示例場景中,我們有一個名為 jsonString 的 Java 字符串,它包含一個 JSON 格式的數據結構,創建一個具有各種屬性的 JSON 對象,例如“id”、“name”、“email”、“age”、“address”、“skills”和“isActive”。

 

String jsonString = "{\"id\": 123456, \"name\": \"John Doe\", \"email\": \"[email protected]\", " +
        "\"age\": 30, \"address\": { \"street\": \"123 Main St\", \"city\": \"New York\", " +
        "\"country\": \"USA\" }, \"skills\": [ \"Java\", \"Python\", \"JavaScript\" ], \"isActive\": true }";

以下是 JSON 對象的分解:

{
  "id": 123456,
  "name": "John Doe",
  "email": "[email protected]",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "country": "USA"
  },
  "skills": ["Java", "Python", "JavaScript"],
  "isActive": true
}

為了實現將此 jsonString 轉換為 Java Map,我們將使用兩個流行的 Java 庫,Jackson 和 Gson。 這些庫提供易於使用的方法來處理 JSON 數據的序列化和反序列化。

2. 使用 Jackson 庫

Jackson 是一個廣泛使用的 Java 庫,可以輕鬆地處理 JSON 數據。它提供對 JSON 解析和序列化的強大支持。

要使用 Jackson,首先將它的 依賴項 添加到我們的 pom.xml 文件中:


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.16.0</version>
</dependency>

在添加了此必需的依賴項後,我們將使用 Jackson 中的 ObjectMapper 類將 JsonNode 轉換為 Java Map


@Test
public void givenJsonData_whenUsingJackson_thenConvertJsonNodeToMap() throws Exception {
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode jsonNode = objectMapper.readTree(jsonString);

    Map<String, Object> map = objectMapper.convertValue(jsonNode, Map.class);
    Assert.assertEquals(123456, map.get("id"));
    Assert.assertEquals("John Doe", map.get("name"));
    Assert.assertEquals("[email protected]", map.get("email"));
    Assert.assertEquals(30, map.get("age"));

    Map<String, Object> address = (Map<String, Object>) map.get("address");
    Assert.assertEquals("123 Main St", address.get("street"));
    Assert.assertEquals("New York", address.get("city"));
    Assert.assertEquals("USA", address.get("country"));

    List<String> skills = (List<String>) map.get("skills");
    Assert.assertEquals("Java", skills.get(0));
    Assert.assertEquals("Python", skills.get(1));
    Assert.assertEquals("JavaScript", skills.get(2));

    Assert.assertEquals(true, map.get("isActive"));
}

代碼首先創建一個 ObjectMapper 實例,該實例負責讀取和寫入 JSON 數據。然後,提供的 JSON 字符串被轉換為 JsonNode 對象,使用 readTree() 方法。此外,convertValue() 方法將 JsonNode 轉換為 Map<String, Object>,從而可以使用鍵值對輕鬆訪問 JSON 數據。

代碼隨後執行一系列斷言以驗證提取的值,檢查預期值是否與轉換後的 Map 中的值匹配。嵌套的對象在 JSON 結構中通過將相應的價值轉換為 Map<String, Object> 訪問,而列表則通過將它們轉換為 List<String> 訪問。最後的斷言驗證與 isActive 鍵關聯的值。

總而言之,這段代碼説明了如何使用 Jackson 的 ObjectMapper 將 JSON 數據轉換為 Map 並執行數據驗證。

3. 使用 Gson 庫

Gson 是 Java 中 JSON 處理的另一個流行庫。它提供了一個簡單靈活的 API,用於將 JSON 轉換為 Java 對象。

要使用 Gson 將 JsonNode 對象轉換為 Map,首先需要在 pom.xml 文件中添加 Gson 依賴項:


<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

接下來,我們將編寫一個測試方法,利用 Gson 庫將 JsonNode 對象轉換為 Java Map


@Test
public void given_JsonData_whenUsingGson_thenConvertJsonNodeToMap() {
    JsonElement jsonElement = JsonParser.parseString(jsonString);
    Gson gson = new Gson();

    Map<String, Object> map = gson.fromJson(jsonElement, Map.class);
    assertEquals(123456, ((Number) map.get("id")).intValue());
    assertEquals("John Doe", map.get("name"));
    assertEquals("[email protected]", map.get("email"));
    assertEquals(30, ((Number) map.get("age")).intValue());

    Map<String, Object> address = (Map<String, Object>) map.get("address");
    assertEquals("123 Main St", address.get("street"));
    assertEquals("New York", address.get("city"));
    assertEquals("USA", address.get("country"));

    List<String> skills = (List<String>) map.get("skills");
    assertEquals("Java", skills.get(0));
    assertEquals("Python", skills.get(1));
    assertEquals("JavaScript", skills.get(2));

    assertEquals(true, map.get("isActive"));
}

根據上述測試方法,Gson 類用於解析 JSON 字符串並將其轉換為 JsonElement 對象。然後,創建一個 Gson 實例,用於將 JsonElement 轉換為 Map<String, Object>

代碼包含多個斷言,用於驗證轉換後的 Map 包含預期的值。例如,它檢查與鍵 id 關聯的值是否等於 123456,以及與鍵 name 關聯的值是否等於 John Doe

嵌套對象,如 address 對象,可以通過將相應的值在 Map 中轉換為 Map<String, Object> 來訪問。類似地,skills 數組通過將其值轉換為 List<String> 來訪問。如前所述,添加一個新的斷言以確認與鍵 isActive 關聯的值是否等於 true

此代碼演示了 Gson 庫將 JsonNode 轉換為 Java Map 以及對提取的值執行斷言的能力。

4. 結論

將一個 JsonNode 對象轉換為 Map 對象是處理 Java 中 JSON 數據時的常見需求。我們可以輕鬆地通過使用像 Jackson 或 Gson 這樣的庫來完成此轉換。

在本教程中,我們提供了詳細的示例以及測試用例,以演示使用 Jackson 和 Gson 庫將 JsonNode 對象轉換為 Map 對象的過程。通過應用這些示例,我們可以高效地處理 JSON 數據並對其進行操作。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.