JSON序列化中包含空值

Jackson
Remote
0
07:11 PM · Nov 30 ,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 類,其中包含 nameaddressage 字段,通過構造方法進行初始化。 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 實例,以便在序列化過程中始終包含 null 值,通過調用 setSerializationInclusion() 方法,並傳入參數 JsonInclude.Include.ALWAYS這種精細的設置確保,即使地址是 null,也能準確地表示在生成的 JSON 輸出中。

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

4. 使用 Gson 庫

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

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

在這裏,我們使用 GsonBuilder 來使用 serializeNulls() 方法設置一個 Gson 實例。 此配置確保在序列化過程中將 null 值包含在內,從而確保結果 JSON 輸出在地址字段為 null 時,能夠精確地表示。

5. 結論

綜上所述,在處理 Java 對象和將其轉換為 JSON 格式時,正確處理 null 值至關重要。

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

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

發佈 評論

Some HTML is okay.