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         }

原文地址:https://www.cnblogs.com/pcheng/p/11507901.html

时间: 2024-08-29 21:31:55

FastJson序列化时过滤字段(属性)的方法的相关文章

FastJson序列化时忽略特定属性

在之前的工作中,一直用jackson来处理json串转换的问题,有些时候我们经常有忽略某些属性的情况,个人比较习惯jackson的注解的方式,而且也是比较灵活的,分别提供了@JsonIgnoreProperties,@JsonIgnore等. 而FastJson中,并没有提供类似的方式,而是提供了各种filter机制来实现的,具体可以参考:https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E

java 序列化时排除指定属性

ava 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2-json-plugin-2.3.15.3.jar,xwork-core-2.3.15.3.jar,当然还有servlet-api.jar 范例: private String getMessageJson(PushMessage message) { List<Pattern> excludePro

C#调用XmlSerializer序列化时生成CDATA节点解决方法

public class Person{    public string Name { get; set; }    public int Age { get; set; }        } 引用内容 <?xml version="1.0"?><Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

GSON使用笔记(1) -- 序列化时排除字段的几种方式

http://blog.csdn.net/zxhoo/article/details/21471005 GSON是Google发布的JSON序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段. 最简单的用法 假设有下面这个类: [java] view plain copy class MyObj { public int x; public int y; public MyObj(int x, int y) { this.x = x; t

C# Newtonsoft.Json JObject移除属性,在序列化时忽略

原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移除属性和值 示例如下 : [csharp] view plain copy //json 序列化 JObject obj1 = JObject.FromObject(new { id = 1, name = "张三", age = 20 }); Console.WriteLine(obj1

[转]Gson过滤字段

原文地址:http://my.oschina.net/orgsky/blog/368768 摘要 Gson过滤字段 Gson过滤字段 Gson 过滤 字段 属性 目录[-] 最简单的用法 方法1:排除transient字段 方法2:排除Modifier为指定类型的字段 方法3:使用@Expose注解 方法4:使用ExclusionStrategy定制字段排除策略 GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,

complex类 序列化时 IsRequired = true 问题

最近项目使用xpo作为数据底层, 需要在webservice中通信(传参和返回)直接使用xpo,则需要改造xpo类,自己实现IXmlSerializable接口. webservice客户端引用后, 调用时候发对象中的字符串类型的值不能为空,因为引用webservice生成的类字段上加了一个属性 [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, IsRequired=true)] 导致字段不能为空,

项目中序列化时,去除属性为null的key

项目中对象属性中的字段有很多时,每次查询需要的属性都不同,但是还是返回null,过滤掉为空的方法 [email protected]标签 此注解用于方法或者属性上(最好就是用在属性上),作用就是在对象做序列化时过滤掉一些为空的属性 [email protected] 此注解一般用于类上,其作用就是在对象做json序列化的时候将java bean中为空的字段去除 [email protected](JsonInclude.Include.NON_NULL) 此注解用于类上,作用就是在对象做序列化的

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?