知識庫 / JSON / Jackson RSS 訂閱

JSON序列化中包含空值

Jackson
HongKong
9
09:43 PM · Dec 05 ,2025

1. 簡介

當我們在 Java 對象中工作並需要將其轉換為 JSON 格式時,正確處理 null 值至關重要。從 JSON 輸出中省略 null 值可能與我們的數據需求不符,尤其當數據完整性至關重要時。

在本教程中,我們將深入研究在 Java 中 JSON 序列化過程中包含 null 值的有效方法。

2. 用例場景:客户管理系統

讓我們假設我們正在開發一個客户管理系統,其中每個客户是一個 Java 對象,具有姓名、電子郵件和年齡等屬性。 此外,某些客户可能沒有電子郵件地址。

當將客户數據序列化為 JSON 以進行存儲或傳輸時,包括null值以處理缺失的電子郵件地址至關重要,以保持數據的一致性。

為了完整起見,讓我們定義用於我們示例中的 Customer 類:

public class Customer {
    @JsonProperty
    private final String name;
    @JsonProperty
    private final String address;
    @JsonProperty
    private final int age;

    public Customer(String name, String address, int age) {
        this.name = name;
        this.address = address;
        this.age = age;
    }

    // ...
}

在這裏,我們定義了 Customer 類,該類包含 name(姓名)、address(地址)和 age(年齡)等字段,這些字段通過構造方法進行初始化。 toString() 方法還提供了一個 JSON 風格的字符串表示形式,便於調試。

請注意,包含 @JsonProperty 註解可確保所有相關字段準確地序列化到 JSON 輸出中,包括當適用時 null 值。

3. 使用 Jackson 庫

Jackson 庫是一款著名的 Java JSON 處理庫,默認情況下會從 JSON 輸出中排除 null 值。但是,我們可以利用 Jackson 的註解來顯式地包含 null 值:

String expectedJson = "{\"name\":\"John\",\"address\":null,\"age\":25}";
Customer obj = new Customer("John", null, 25);

@Test
public void givenObjectWithNullField_whenJacksonUsed_thenIncludesNullValue() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
    String json = mapper.writeValueAsString(obj);
    assertEquals(expectedJson, json);
}

在這種方法中,我們首先建立 expectedJson 字符串。隨後,我們實例化一個 Customer 對象,其值為 Johnnull25

接下來,我們配置一個 ObjectMapper 實例,通過調用 setSerializationInclusion() 方法,並傳入參數 JsonInclude.Include.ALWAYS,以確保在序列化過程中始終包含 null 值。這種精細的設置確保即使地址為 null,也能準確地在生成的 JSON 輸出中表示。

最後,我們使用 assertEquals() 方法來驗證 json 字符串與 expectedJson 字符串是否匹配。

4. 使用 Gson 庫

Gson 是一個替代的 Java 庫,可用於 JSON 序列化和反序列化。它提供了與 Gson 相似的選項,可以顯式包含 null 值。下面我們來看一個示例:

@Test
public void givenObjectWithNullField_whenGsonUsed_thenIncludesNullValue() {
    Gson gson = new GsonBuilder().serializeNulls().create();
    String json = gson.toJson(obj);
    assertEquals(expectedJson, json);
}

在這裏,我們使用 GsonBuilder 來設置一個 Gson 實例,並使用 serializeNulls() 方法進行配置。 這種配置確保 null 值在序列化過程中被包含,從而在生成的 JSON 輸出中準確地表示,即使地址字段為 null

5. 結論

綜上所述,在處理 Java 對象中的 null 值並將其轉換為 JSON 格式時,務必採取適當的處理方法。

在本教程中,我們學習瞭如何在 JSON 序列化過程中進行此操作。

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

發佈 評論

Some HTML is okay.