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 ...
随机推荐
- 面试【JAVA基础】类加载机制
1.类加载过程 1.1.加载 查找和导入class文件. 1.2.链接 验证 检验载入的class文件的正确性,完整性. 准备 给类的静态变量分配存储空间,会赋对象类型的默认值. 解析 将class常 ...
- oracle无法通过ip地址连接
问题描述:使用plsql可以连接本地oracle实例,但telnet 192.168.130.71 (内网ip)不通. 其实在11g安装完成后,默认网络配置 listener.ora中 host = ...
- 12_Python语法示例(函数)
1.写一个函数mysum,此函数带有两个参数x,y打印出两个参数x,y的和 def mysum(x, y): print(x + y) mysum(3, 2) 2.写一个函数print_even,传入 ...
- 高可用服务之Keepalived基础入门
前面我们聊了聊高可用集群corosync+pacemaker的相关概念以及相关工具的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/category/18 ...
- intellij idea 无法进行调试的解决方案
inteliij idea 如果出现无法调试该怎样做?debug中各功能为灰色. 如果你用的是外来项目,可能是没有添加这个项目自带的library: 解决办法: 在file->project ...
- SQL Builder 1.04
解析效果: select id,code,name,utime,src,ctime from stock where id<20 and code like '%6%' order by id, ...
- 现象:当指定logback的FileNamePattern为日期2020-01-15后,如果有线程不断的往里写log,过了零点文件不会变成下一日2020-01-16,还是会在2020-01-15里继续写 结论:写log的线程不停,文件不会按日子更换。
logback版本:1.1.11 这个是我实验验证的,昨天我配置了一个logback,然后用两个线程不断往里写log,结果发现到了今天2020-01-16日,log文件还是昨天的logbackCfg. ...
- 上传文件到服务器指定位置 & 从服务器指定位置下载文件
需要的jar包: 去maven仓库自己搜索com.jcraft下载jar包 <dependency> <groupId>com.jcraft</groupId> & ...
- iTextSharp生成PDF文件
这是一篇简单的教程,所以只涉及一些iTextSharp生成pdf的简单应用,详细教程请搜索iTextSharp进入官网看官方文档(英文版). iTextSharp官方文档:https://itextp ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...