json解析对应的value为null_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));

}

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值