知識庫 / Java Map RSS 訂閱

將 JSONNode 對象轉換為 Map

Jackson,Java Map
HongKong
9
09:46 PM · Dec 05 ,2025

1. 介紹

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

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

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

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

2. 概述

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

在我們的示例場景中,我們有一個 Java 字符串 jsonString,它包含一個 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 字符串使用 readTree() 方法轉換為 JsonNode 對象。 此外,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 對象。

要將 JsonNode 對象轉換為 Gson 中的 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 庫中的 JsonParser 類被用於解析 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. 結論

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

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

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

發佈 評論

Some HTML is okay.