FastJson 序列化處理 null 值

槑孒發表於2024-10-19

FastJson 序列化處理 null 值的

1. 預設行為

  • FastJson 序列化時預設跳過值為 null 的欄位。這意味著如果一個物件的某個欄位為 null,序列化後的 JSON 不會包含該欄位。

2. 序列化 null 欄位

  • 如果希望保留 null 值欄位,即使欄位的值為 null 也要在 JSON 中體現出來,可以使用 SerializerFeature.WriteMapNullValue 配置。這會讓所有欄位即使是 null 也被序列化。

3. null 字串輸出為空字串

  • 對於 String 型別的欄位,使用 SerializerFeature.WriteNullStringAsEmpty 可以將 null 值序列化為空字串 ""。示例:

    {
        "field": ""
    }
    

    但要注意,這個配置只對 String 型別的欄位有效。

4. null 值轉換為其他預設值

  • FastJson 提供了一系列 SerializerFeature 用於處理不同型別的 null 值:
    • WriteNullStringAsEmpty: 將 null 字串輸出為空字串 ""
    • WriteNullNumberAsZero: 將 null 數字型別欄位輸出為 0
    • WriteNullListAsEmpty: 將 null 列表型別欄位輸出為空列表 []
    • WriteNullBooleanAsFalse: 將 null 布林型別欄位輸出為 false

5. 示例程式碼

如果希望將 null 值保留,同時將字串型別的 null 輸出為空字串,可以在序列化時配置多個 SerializerFeature

return JSON.toJSONString(t, 
    JSONWriter.Feature.WriteClassName,  // 輸出型別名
    SerializerFeature.WriteMapNullValue, // 保留 null 值欄位
    SerializerFeature.WriteNullStringAsEmpty // 將 null 字串輸出為空字串
).getBytes(DEFAULT_CHARSET);

6. 注意事項

  • 對於非字串型別的欄位(如 Integer, LocalDateTime),WriteNullStringAsEmpty 不適用。這些欄位如果為 null,需要使用其他對應的 SerializerFeature(如 WriteNullNumberAsZero)進行處理。

為什麼fastjson欄位為null時不輸出空字串?

相關文章