fastjson 不转某些字段_FastJson序列化时过滤字段(属性)的方法总结

FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。

方法一、FastJson的注解

1 @JSONField(serialize = false)2 private String name;

最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段。

方法二、JAVA关键字

1 @JSONField(name = "AGE")2 private transient String age;

在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就可以忽略掉该字段。因为是JAVA关键字所以也会影响该字段其他序列化操作。

方法三、FastJson的属性名过滤器

1 SimplePropertyPreFilter filter = newSimplePropertyPreFilter();2 filter.getExcludes().add("PHONE");3 System.out.println(JSONObject.toJSONString(u, filter));

通过SimplePropertyPreFilter过滤器,来过滤指定的属性名,然后在转JSON的时候,带上过滤器参数即可。

如果需要保留的参数比较少,也可以反过来,使用filter.getIncludes().add("PHONE");的方式来包含指定的字段。还可以直接在new的时候带上,这里是可变参数,所以可以同时指定多个,即如下这种写法:

1 SimplePropertyPreFilter filter = new SimplePropertyPreFilter("PHONE", "SEX");

注:这里的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

方法四、FastJson的属性过滤器

1 PropertyFilter profilter = newPropertyFilter() {2 @Override3 public booleanapply(Object object, String name, Object value) {4 if (name.equals("SEX")) {5 //false表示字段将被排除在外

6 return false;7 }8 return true;9 }10 };11 System.out.println(JSON.toJSONString(u, profilter));

通过实现PropertyFilter接口的apply方法,来实现过滤属性,方法参数name即为字段的key,参数value即为字段的value,这种方式最强大,因为可以自定义具体过滤规则。方法返回false即为排除该字段。在转JSON的时候,带上过滤器参数即可。注:参数name指的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

如果是JAVA8的话。可以使用lambda表达式,更简洁,如下:

1 PropertyFilter profilter = (object, name, value) ->{2 if (name.equals("SEX")) {3 //false表示字段将被排除在外

4 return false;5 }6 return true;7 };

附上实体类做参考:

1 public classUser {2

3 @JSONField(name = "ID")4 privateString id;5

6 @JSONField(serialize = false)7 privateString name;8

9 @JSONField(name = "AGE")10 private transientString age;11

12 @JSONField(name = "SEX")13 privateString sex;14

15 @JSONField(name = "PHONE")16 privateString phone;17 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值