知識庫 / JSON RSS 訂閱

Gson 使用到 Java 記錄的 JSON 反序列化

JSON
HongKong
11
09:45 PM · Dec 05 ,2025

1. 簡介

去序列化過程涉及將 JSON 對象(或數據)的表示形式轉換為目標編程語言中的等效對象,例如 Java 對象。Gson 是一個流行的 Java 庫,用於 JSON 序列化和去序列化,它簡化了這一過程。

在本教程中,我們將探索如何使用 Gson 將 JSON 數據序列化為 Java 記錄。

2. 創建 Java 記錄

在深入研究代碼示例之前,我們需要確保 Gson 庫已添加到我們的項目中。我們可以將其作為依賴項添加到我們的構建工具中,例如 Maven 或 Gradle。對於 Maven,我們添加以下依賴項:

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

讓我們從定義一個簡單的 Java Record 開始,我們將用於反序列化。例如,考慮一個 Person Record,包含 nameageaddress 字段:

public rеcord Pеrson(String namе, int agе, String addrеss) {
    // No nееd to еxplicitly dеfinе constructors, gеttеrs, or othеr mеthods
}

3. 將 JSON 序列化為 Java 記錄

現在,讓我們看看如何使用 Gson 將 JSON 數據序列化為我們的 Person 記錄。 假設我們已經有了以下 JSON 對 Person 的表示:

{ "name": "John Doe", "age": 30, "address": "123 Main St" }

讓我們使用 Gson 的 fromJson() 方法將此 JSON 字符串轉換為 Person 記錄:

@Test
public void givenJsonString_whenDeserialized_thenPersonRecordCreated() {
    String json = "{\"name\":\"John Doe\",\"age\":30,\"address\":\"123 Main St\"}";

    Person person = new Gson().fromJson(json, Person.class);

    assertEquals("John Doe", person.name());
    assertEquals(30, person.age());
    assertEquals("123 Main St", person.address());
}

在此示例中,fromJson()方法接受JSON字符串和JSON應轉換成的類類型(Person.class)。Gson隨後會自動將JSON字段映射到相應的記錄組件。

4. 處理嵌套對象

如果我們的 JSON 包含嵌套對象,Gson 也能很好地處理它們!

讓我們擴展我們的 <em style="font-style: italic;">Person</em> 記錄,包含 <em style="font-style: italic;">Contact</em> 記錄,用於存儲個人的聯繫信息:

public record Contact(String email, String phone) {
    // Constructor, getters, and other methods are automatically generated
}
public record Person(String name, int age, String address, Contact contact) {
    // Constructor, getters, and other methods are automatically generated
}

現在,讓我們考慮一個包含聯繫信息的 JSON 表示:

{ "namе": "John Doе", "agе": 30, "addrеss": "123 Main St", "contact": { "еmail": "john.doе@еxamplе.com", "phonе": "555-1234" } }

序列化代碼基本保持不變,Gson 處理嵌套對象:

@Test
public void givenNestedJsonString_whenDeserialized_thenPersonRecordCreated() {
    String json = "{\"name\":\"John Doe\",\"age\":30,\"address\":\"123 Main St\",\"contact\":{\"email\":\"[email protected]\",\"phone\":\"555-1234\"}}";

    Person person = new Gson().fromJson(json, Person.class);

    assertNotNull(person);
    assertEquals("John Doe", person.name());
    assertEquals(30, person.age());
    assertEquals("123 Main St", person.address());

    Contact contact = person.contact();

    assertNotNull(contact);
    assertEquals("[email protected]", contact.email());
    assertEquals("555-1234", contact.phone());
}

5. 結論

綜上所述,Gson 和 Java 記錄的結合提供了一種簡潔而富有表現力的處理 JSON 反序列化的方式,即使處理嵌套結構也同樣有效。

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

發佈 評論

Some HTML is okay.