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時不輸出空字串?