如果你想在序列化時保留值為
null
的字段,只要打開 Fastjson2 的WriteNulls
特性即可。常見做法有兩種——按調用級別開啟,或全局開啟。
1. 在每次序列化時加 WriteNulls
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;public class Demo {public static void main(String[] args) {MyBean bean = new MyBean();bean.setName("張三");bean.setAge(null);// 加上 WriteNulls,會輸出 "age":nullString json = JSON.toJSONString(bean,// 輸出 null 字段JSONWriter.Feature.WriteNulls,// 可選:還可以用其他特性一起,如格式化JSONWriter.Feature.PrettyFormat);System.out.println(json);}
}
輸出示例:
{"name": "張三","age": null
}
2. 全局開啟 WriteNulls
如果你想讓項目里所有 toJSONString(...)
都默認帶上 null 字段,可以在程序啟動(或某個 static
塊)里統一配置:
import com.alibaba.fastjson2.JSONFactory;
import com.alibaba.fastjson2.JSONWriter;public class Fastjson2Config {static {long features = JSONFactory.getDefaultWriterFeatures();// 把 WriteNulls 這個位打開features |= JSONWriter.Feature.WriteNulls.mask;JSONFactory.getDefaultWriterFeatures(features);}
}
這樣,無論后續代碼里有沒有在 JSON.toJSONString
里顯式傳入 WriteNulls
,都默認會把所有 null
值字段輸出成 "field":null
。
3. 針對集合/特定類型的 null 值輸出
如果你還希望對集合、布爾、數字等類型的 null
值有更細粒度的控制,Fastjson2 也提供了其他特性,比如:
-
WriteNullListAsEmpty
—— 把List<?> list = null
輸出成"list":[]
-
WriteNullStringAsEmpty
—— 把String s = null
輸出成"s":""
-
WriteNullNumberAsZero
—— 把Number n = null
輸出成"n":0
-
WriteNullBooleanAsFalse
—— 把Boolean b = null
輸出成"b":false
用法同上,只要把對應的 Feature
一起加到 toJSONString
或全局配置里即可。
小結:
-
保留 null → 打開
JSONWriter.Feature.WriteNulls
。 -
忽略 null → 打開
JSONWriter.Feature.SkipNulls
(或者全局去掉WriteNulls
)。 -
其他細粒度需求可組合使用其它
WriteNull*
特性。