如果你想在序列化时保留值为
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*特性。