fastjson,对象转json字符串的过程中对value为null的值的一些处理
前言
fastjson是一个非常好用的java库,用于操作对象json序列化等等。
问题
最近在写代码的时候遇到问题,通过JSON.toJSONString方法将一个实体对象转为json字符串,转出来发现原本
对象中value为null的字段被过滤掉了。。。
实体对象
package so.sao.code;
import lombok.Data;
@Data
public class Person {
String name;
String gender;
String nickname;
String phone;
}
测试代码
public static void main(String[] args) {
Person person = new Person();
person.setName("wyz");
String json = JSON.toJSONString(person);
System.out.println(json);
}
输出结果

发现只有设置了值的字段name才有输出,而其余为空的字段则都被过滤掉了
解决
怎样让值为null的key不被过滤掉
- 设置SerializerFeature
设置SerializerFeature里面有很多特性可以使用

要让空值也能够输出的特性值是SerializerFeature.WriteMapNullValue
改造代码:
public static void main(String[] args) {
Person person = new Person();
person.setName("wyz");
// String json = JSON.toJSONString(person);
// System.out.println(json);
// 设置SerializerFeature
System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));
}
输出结果:

值为null属性直接放到json字符串里面不太好看,能不能把null值转成其他的值,比如空字符串
这个时候就需要用到过滤器了,仔细看看JSON.toJSONString的其他几个方法

toJSONString方法中可以放一个或多个过滤器,常用的过滤器有以下几种:

要实现把null值转为空字符串的效果可以使用ValueFilter
代码实现:
public static void main(String[] args) {
Person person = new Person();
person.setName("wyz");
// String json = JSON.toJSONString(person);
// System.out.println(json);
// 设置SerializerFeature
// System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));
// 设置NameFilter
System.out.println(JSON.toJSONString(person, (ValueFilter) (object, name, value) -> {
if(value == null){
return "";
}
return value;
}));
}
输出结果:

一个特殊的需求,有的值为null需要过滤,有的又不需要过滤。。。(这就是我遇到的)
使用PropertyFilter
代码实现:
public static void main(String[] args) {
Person person = new Person();
person.setName("wyz");
// String json = JSON.toJSONString(person);
// System.out.println(json);
// 设置SerializerFeature
// System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));
// 设置NameFilter
// System.out.println(JSON.toJSONString(person, (ValueFilter) (object, name, value) -> {
// if(value == null){
// return "";
// }
//
// return value;
// }));
// 设置PropertyFilter
System.out.println(JSON.toJSONString(person, new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
return name.equals("gender") || value != null;
}
}, SerializerFeature.WriteMapNullValue));
}
输出结果:

fastjson,对象转json字符串的过程中对value为null的值的一些处理的更多相关文章
- fastjson对象转为json字符串日期格式变为时间戳问题
今天尝试将map集合转为json对象时遇到一个问题.map中的value为日期格式如"2019-03-01",在使用JSONObject.toJSON(map).toString( ...
- fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化
fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化 在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串 ...
- js 中 json对象 与 json字符串 间相互转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 JSON字符串: var str1 = '{ " ...
- Springboot 通过FastJson实现bean对象和Json字符串互转
Json格式在后台服务中的重要性就不多说了,直入正题.首先引入pom文件,这里使用的是1.2.83版本 1 <dependency> 2 <groupId>com.alibab ...
- jQuery中json对象与json字符串互换
json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj); 根据“|”把字符串变成数组.spli ...
- java对象与Json字符串之间的转化(fastjson)
1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...
- struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)
JSON主要创建如下两种数据对象: 由JSON格式字符串创建,转换成JavaScript的Object对象: 由JSON格式字符串创建,转换成JavaScript的List或数组链表对象. 更多关于J ...
- JS中实现JSON对象和JSON字符串之间的相互转换
对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间 ...
- js中 json对象与json字符串相互转换的几种方式
以下总结js中 json对象与json字符串相互转换的几种方式: 一.JSON对象转化为JSON字符串 1.使用JSON.stringify()方法进行转换 该方法不支持较老版本的IE浏览器,比如:i ...
随机推荐
- Unity内生成深度贴图
https://qiita.com/bokkuri_orz/items/08cbaeae6a34fed7f903 https://www.cnblogs.com/sifenkesi/p/4721649 ...
- Timeline Event
https://forum.unity.com/threads/timeline-events.479400/
- openssl1.0在mac下的编译安装(踩坑精华)
之前做了一次brew版本升级,然后用pip3安装的一个python命令就无法执行了(涉及到openssl库),执行就会报一个错误. ImportError: dlopen(/usr/local/Cel ...
- 万字长文,以代码的思想去详细讲解yolov3算法的实现原理和训练过程,Visdrone数据集实战训练
以代码的思想去详细讲解yolov3算法的实现原理和训练过程,并教使用visdrone2019数据集和自己制作数据集两种方式去训练自己的pytorch搭建的yolov3模型,吐血整理万字长文,纯属干货 ...
- 用于测试 SqlAnalyzer1.01 的21个测试用例
感慨:当年看着 https://www.cnblogs.com/heyang78/p/11451814.html 一文望洋兴叹,如今我也自己做出来了! 21. 原文=select name, cnt ...
- Oracle的dbms_random.value(min,max)函数包括边界值吗?数据是如何分布的?
事先申明下,我的DB环境是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,不保证在其它版本下也 ...
- 关于HTML基本标签,了解一下!
目录 1 前言 2 正文 2.1 HTML文档结构 2.1.1 html标签 2.1.2 head标签 2.1.3 title标签 2.1.4 body标签 2.2 HTML常用标签 2.2.1 换行 ...
- Superset 0.37 发布——颜值最高的数据可视化平台
Superset 0.37,增加可视化插件,行级权限控制 使用Superset已经有一段时间,其良好的体验与丰富的图表功能节省了大量的时间.但是对于权限,自定义图表,图表下载,报警邮件一直没有很好的支 ...
- oracle之三备份恢复概述
备份恢复概述 1.1 数据库故障的类型: 1)user process failure: pmon 自动处理 2)instance failure: smon 自动处理 3)user errors : ...
- [LeetCode]1083. 销售分析 II(Mysql,having+if)
题目 编写一个 SQL 查询,查询购买了 S8 手机却没有购买 iPhone 的买家. 题解 使用having + sum+if,而不是自查询. 代码 # Write your MySQL query ...