@[toc]

问题

当 JavaeBean 中某个属性值为 null 时,转换为 JSONObject 对象或者 json 字符串时,该属性值被忽略。
如何让不管值是否为 null,转化后该属性还存在,只是值为 null。

情况演示

   class St {private String sid;private String sname;private String ssex;public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSsex() {return ssex;}public void setSsex(String ssex) {this.ssex = ssex;}public static void main(String[] args) {St st = new St();st.setSid("111");st.setSname("aaa");JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st));System.out.println(jsonSt);}
}

输出结果: {“sname”:"aaa","sid":111} ssex属性没了!

解决办法

在转化的方法中添加这个属性:SerializerFeature.WriteMapNullValue。

public static void main(String[] args) {St st = new St();st.setSid("111");st.setSname("aaa");JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st, SerializerFeature.WriteMapNullValue));System.out.println(JSON.toJSONString(jsonSt, SerializerFeature.WriteMapNullValue));}

输出结果:{"sname":"aaa","sid":111,"ssex":null}

更多属性

上文中用到的 JSON.toJSONString(Object object, SerializerFeature… features) 方法 SerializerFeature 的属性值还有如下
SerializerFeature属性
含义
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 使用输出为null的参数,默认为false

当value为null时,JSONObject.toJSONString()返回的json字符串将不展示对应的key,这明显不是我们想要的,所以可以使用

SONObject.toJSONString(Object object, SerializerFeature... features) 来获取我们想要的值,SerializerFeature属性对应的值和含义如下:

名称 含义
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteEnumUsingToString Enum输出name()或者original,默认为false
UseISO8601DateFormat Date使用ISO8601格式输出,默认为false
WriteNullListAsEmpty List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,而非null
WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null
SkipTransientField 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField 按字段名称排序后输出。默认为false
WriteTabAsSpecial 把\t做转义输出,默认为false 不推荐
PrettyFormat 结果是否格式化,默认为false
WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到
DisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为false
WriteSlashAsSpecial 对斜杠’/’进行转义
BrowserCompatible 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE6,默认为false
WriteDateUseDateFormat 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat);
DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
NotWriteRootClassName 含义
BeanToArray 将对象转为array输出
WriteNonStringKeyAsString 含义
NotWriteDefaultValue 含义
BrowserSecure 含义
IgnoreNonFieldGetter 含义
WriteEnumUsingName 含义

转载于:https://blog.51cto.com/7964880/2398784

FastJson 转换 javaBean 时 null 值被忽略都问题相关推荐

  1. fastjson使用toJSONString时null值不序列化问题

    问题描述: 在使用fastjson调用 JSON.toJSONString(obj); 方法将对象转换为json字符串时,如果对象obj的属性字段有值为null时,该属性字段不会被序列化. 比如:定义 ...

  2. JPA踩坑记:Spring Data Jpa 更新为null的问题(save方法保存时null值会被更新到数据库)

    关键字: JPA更新为null,JPA save null,JPA保存为null 今天使用jpa的save方法时发现null字段也会被更新到数据库,这个直接把数据库数据覆盖的行为很可怕,果断研究了一下 ...

  3. fastjson生成json时Null属性不显示

    举个例子 生成JSON代码片段 [java] 预览复制 Map < String , Object > jsonMap = new HashMap< String , Object& ...

  4. excel导入数据时null值的处理

    场景 excel导入数据时,空文本转换金额报错. 问题分析 如amount字段,后台明明设置了为空不转换啊: if(StringUtils.isEmpty(amount)){invoice.setAm ...

  5. 你还不知道mysql中空值和null值的区别吗?

    前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值.以下带来示例给大家进行讲解. 建表 create table tes ...

  6. mysql group by 区分null 值和非null_你知道mysql中空值和null值的区别吗

    前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值.以下带来示例给大家进行讲解. 建表 create table tes ...

  7. mysql两个空值相同吗_你知道mysql中空值和null值的区别吗

    前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值.以下带来示例给大家进行讲解. 建表 create table tes ...

  8. 处理数字_7_含NULL值的列的聚合

    含NULL值的列的聚合 需求描述 需求:验证行NULL的列的聚合函数的计算结果. 解决方法:通过MIN.MAX.SUM.AVG.COUNT(*)来完成. 注: 数据库数据集SQL脚本详见如下链接地址 ...

  9. 写入null_ArrayList并发写出现Null值

    ArrayList并非线程安全的容器,这一点大家可能都非常清楚,但是在并发写入的情况下,不安全的情况具体有哪些,大家是否很清楚呢?本篇文章重点聊一下出现null的情况,然后对于其他并发写的安全做一个简 ...

最新文章

  1. Easyui 让DataGrid适应浏览器宽度
  2. RX学习笔记:正则表达式
  3. 财务 计算机网络,计算机网络技术在财务系统中的应用
  4. deepfm算法思维导图和代码
  5. python获取系统时间函数_Python常用时间操作总结【取得当前时间、时间函数、应用等】...
  6. 包含html语言的超链接标记的网页_什么是网页
  7. mybatis热加载的实现
  8. asp.net mvc(九)
  9. Linux下发生段错误时如何产生core文件-转
  10. Redis HyperLogLog命令,phpredis如何执行HyperLogLog命令
  11. 深度学习:Imagenet Object Classification方法
  12. 2022Java最新学习路线(初学者必看)
  13. 通俗易懂的自动控制原理 # 绪论
  14. (BISM)FTP搜索引擎BLOG开通了,专门交流搜索引擎技术
  15. 前端电子时钟字体引入
  16. matlab gui编程教程,matlab如何使用gui
  17. Steam VR目录结构
  18. 这几款视频语音转文字软件你值得拥有
  19. 编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度和以兆字节(MB)为单位的文件大小。程序中应计算文件的下载时间。
  20. oeasy教您玩转vim - 21 - 状态横条

热门文章

  1. 结构体的两种声明方式:堆上和栈上以及在双链表的应用
  2. CUDA Samples: Streams' usage
  3. 给动态生成的按钮添加ajax,Ajax/Javascript动态创建按钮的问题
  4. php 485串口通信,485串口通信中的常见问题
  5. php用命令查mysql_phpMySQL命令大全总结
  6. 用python做算法_自己用python写的螺旋矩阵生成算法
  7. 计算机在人力资源管理中的应用论文,计算机人事管理论文
  8. 【硬件基础】有源蜂鸣器与无源蜂鸣器
  9. java报错MalformedURLException: unknown protocol: c
  10. switch的case使用数组C语言,使用常量数组的元素作为switch语句中的case