将对象转为json字符串时排除某些不需要的属性

本文介绍了在Java中如何使用fastjson库将对象转换为JSON字符串时排除不需要的属性。通过`JSONObject.toJSONString()`方法,可以指定包含或排除的属性,并展示了如何利用`SerializerFeature`进行格式设置。同时,还提到了将对象转换为JSONObject对象后再进行属性的移除或新增,以实现转换时的精细化控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将对象转为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字符串时排除某些属性的方法!

感谢大家的阅读,喜欢就点个赞,这将是我继续为大家带来简明易懂教程的最大动力,如果文章帮助你解决了问题,这正是我所愿的,感谢大家支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值