当前位置: 首页 > news >正文

fastjson2 json.tojsonstring 会自动忽略过滤掉 key: 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":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* 特性。

相关文章:

  • Linux Shell编程之条件语句
  • SGLang 实战介绍 (张量并行 / Qwen3 30B MoE 架构部署)
  • 红黑树详解初版
  • 公链钱包开发:技术逻辑与产品设计实践
  • Asp.Net Core IIS发布后PUT、DELETE请求错误405
  • 飞云分仓操盘副图指标操作技术图文分解
  • Ceph PG unfound/lost 问题排查与解决
  • 101alpah_第5个alpha学习
  • 电子电气架构 --- 如何有助于提安全性并减少事故
  • Spark缓存--cache方法
  • 力扣:多数元素
  • 【C/C++】RPC与线程间通信:高效设计的关键选择
  • 香港国际交易节奏解析:结构性波动背后的信号逻辑
  • 【软件设计师:数据库】13.数据库控制与安全
  • 关于多版本CUDA共存的研究,是否能一台机子装两个CUDA 版本并正常切换使用
  • Vue2:引入公共JS,通过this调用
  • 前端基础之《Vue(15)—组件通信(2)》
  • 【漫话机器学习系列】247.当 N=整个母体(WHEN N=POPULATION)
  • vue2 两种路由跳转方式
  • 网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
  • 金地集团:今年前4个月实现销售额109.3亿元,同比下降52.44%
  • 黄玮接替周继红出任国家体育总局游泳运动管理中心主任
  • 国家主席习近平抵达莫斯科
  • 又一日军“慰安妇”制度受害者去世,大陆登记在册幸存者仅剩7人
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%
  • 习近平在俄罗斯媒体发表署名文章