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,包含 name、age 和 address 字段:
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 反序列化的方式,即使處理嵌套結構也同樣有效。