需求:有时候,我们要传一个属性值可以为空的的对象,但是用JSON.toJSONString(obj)不能实现,因为该方法只获取其中的属性值为非空(不为“”或者null)的属性和属性值,那怎么办呢?那我下面的例子即将能帮到你!
直接上干货!!
package com.json.test;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.json.model.User;
/**
*
* @Describtion:JSON测试类
* @author: future
* 2019年7月28日下午3:32:53
*/
public class JsonTetst {
@Test
public void JsonTetst() {
/**
* json字符串转化为对象
* 注意
* 1、telephone该属性没有值
* 2、sex该属性值为null
*/
String jsonString = "{name:'Antony',age:'12',sex:null,telephone:''}";
User user = JSON.parseObject(jsonString, User.class);
System.out.println("toObj==\n"+user.toString());
/**
* 对象转化为json字符串
* 注意,观察telephone和sex属性没有打印出来
*/
String jsonStr = JSON.toJSONString(user);
System.out.println("toJSON1==\n"+jsonStr.toString());
/**
* 重点
* 注意,观察telephone和sex属性和值都打印出来了
*/
String toJSONString = JSON.toJSONString(user,SerializerFeature.WriteMapNullValue);
System.out.println("toJSON2==\n"+toJSONString);
}
}
其中User对象为:
package com.json.model;
import java.util.Date;
/**
*
* @Describtion:
* @author: future
* 2019年7月28日下午3:32:11
*/
public class User {
private String name;
private Integer age;
private String sex;
private Date birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
//省略getter和setter方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", birthday=" + birthday +
'}';
}
}
测试结果:
这个例子代码参照https://blog.youkuaiyun.com/wodetian1225/article/details/80975719,感谢他的分享,记录一下!!