> 技术文档 > fastjson2 json.tojsonstring 会自动忽略过滤掉 key: null的数据 _json.tojsonstring null

fastjson2 json.tojsonstring 会自动忽略过滤掉 key: null的数据 _json.tojsonstring null


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