FastJson序列化时过滤字段(属性)的方法总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 = new SimplePropertyPreFilter();
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 = new PropertyFilter() {
2 @Override
3 public boolean apply(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 class User {
2
3 @JSONField(name = "ID")
4 private String id;
5
6 @JSONField(serialize = false)
7 private String name;
8
9 @JSONField(name = "AGE")
10 private transient String age;
11
12 @JSONField(name = "SEX")
13 private String sex;
14
15 @JSONField(name = "PHONE")
16 private String phone;
17 }。