将对象转为json字符串时排除某些不需要的属性
一、使用JSONObject.toJSONString()方法
种一棵树最好的时间是10年前,其次就是现在,加油! --by蜡笔小柯南
当我们使用fastjson工具类进行json与实体类(对象)之间的转换时,我们会遇到以下问题:
- 将对象转为json时,不需要对象中的全部属性,只要其中几个(如:只要 id,username,password)
下面的代码示例中,分别演示了将不需要的属性进行排除,以及需要的属性进行包含。
- SerializerFeature.PrettyFormat: 格式化json数据,如果不加,会以一行进行显示
- SerializerFeature.WriteMapNullValue: 让属性为null的值进行显示(默认情况下属性为null的值不会显示)
将对象转为json数据时,排除不需要的属性;或者只需要其中某几个属性
使用JSONObject.toJSONString()方法
public static String toJSONString(Object object, SerializeFilter filter, SerializerFeature... features);
第一个参数:要转换的对象
第二个参数:可以为要包含或者排除的数组名,也可以传格式化json的参数(SerializerFeature.PrettyFormat)
第三个参数:SerializerFeature.WriteMapNullValue(不写,不显示属性为null的值;要想显示属性为null的值,必须加此参数)
- 新建User对象
/**
* 用户实体类
* @author 蜡笔小柯南
*/
public class User {
private Long id;
private String username;
private String password;
private String sex;
private String telephone;
private String hobby;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", telephone='" + telephone + '\'' +
", hobby='" + hobby + '\'' +
'}';
}
}
- 创建Test类进行测试
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.PropertyPreFilters;
public class Test {
public static void main(String[] args){
User user = new User();
user.setId(1L);
user.setUsername("张三");
user.setPassword("");
user.setSex("男");
user.setTelephone(null);
user.setHobby("吃");
String jsonString = null;
/**
* 使用SerializeFilter来过滤不需要的属性
* 通过指定需要排除的属性和要包含的属性
* @author 蜡笔小柯南
*/
//需要排除的属性
String[] excludeAttributes = {"sex", "hobby"};
System.out.println(Arrays.toString(excludeAttributes));
//需要包含的属性
String[] includeAttributes = {"id", "username", "telephone"};
//创建PropertyPreFilters对象
PropertyPreFilters propertyPreFilters = new PropertyPreFilters();
//添加要排除的属性
PropertyPreFilters.MySimplePropertyPreFilter exclude = propertyPreFilters.addFilter();
exclude.addExcludes(excludeAttributes);
//添加要包含的属性
PropertyPreFilters.MySimplePropertyPreFilter include = propertyPreFilters.addFilter();
include.addIncludes(includeAttributes);
/**
* SerializerFeature.PrettyFormat: 格式化json数据,如果不加,会以一行进行显示
* SerializerFeature.WriteMapNullValue: 让属性为null的值进行显示
* @author 蜡笔小柯南
*/
//1.默认忽略值为null的属性
jsonString = JSONObject.toJSONString(user, SerializerFeature.PrettyFormat);
System.out.println("第一种情况:" + jsonString);
//2.包含值为null的属性
jsonString = JSONObject.toJSONString(user,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue);
System.out.println("第二种情况:" + jsonString);
//3.默认忽略值为null的属性,排除sex和hobby属性
jsonString = JSONObject.toJSONString(user,exclude,SerializerFeature.PrettyFormat);
System.out.println("第三种情况:" + jsonString);
//4.包含值为null的属性,但是排除sex和hobby属性
jsonString = JSONObject.toJSONString(user,exclude,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue);
System.out.println("第四种情况:" + jsonString);
//5.默认忽略值为null的属性,但是包含id,username,telephone属性(因为telephone为null,所以不显示)
jsonString = JSONObject.toJSONString(user,include,SerializerFeature.PrettyFormat);
System.out.println("第五种情况:" + jsonString);
//6.包含值为null的属性,也包含id,username,telephone属性
jsonString = JSONObject.toJSONString(user,include,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue);
System.out.println("第六种情况:" + jsonString);
}
}
输出结果
第一种情况:{
"hobby":"吃",
"id":1,
"password":"",
"sex":"男",
"username":"张三"
}
第二种情况:{
"hobby":"吃",
"id":1,
"password":"",
"sex":"男",
"telephone":null,
"username":"张三"
}
第三种情况:{
"id":1,
"password":"",
"username":"张三"
}
第四种情况:{
"id":1,
"password":"",
"telephone":null,
"username":"张三"
}
第五种情况:{
"id":1,
"username":"张三"
}
第六种情况:{
"id":1,
"telephone":null,
"username":"张三"
}
二、使用JSONObject对象对属性进行新增或移除
将对象先转为JSONObject对象,再调用JSONObject对象的方法
//将对象(vo)转为JSONObject
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(vo);
//调用remove方法移除不需要的属性
jsonObject.remove("remark");
//将对象数据转为字符串
String jsonString = JSON.toJSONString(jsonObject);
- remove(Object key):指定key的名称,即对象中的属性名,转为json字符串的时候就会把指定key的属性移除
- put(String key,Object value):指定key和value的名称
以上就是将对象转为json字符串时排除某些属性的方法!
感谢大家的阅读,喜欢就点个赞,这将是我继续为大家带来简明易懂教程的最大动力,如果文章帮助你解决了问题,这正是我所愿的,感谢大家支持!!!