FastJson序列化时(即转成JSON字符串时),能够过滤掉部分字段,或者只保留部分字段,方法有不少,下面举一些经常使用的方法。app
方法1、FastJson的注解ide
1 @JSONField(serialize = false) 2 private String name;
最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段。spa
方法2、JAVA关键字code
1 @JSONField(name = "AGE") 2 private transient String age;
在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就能够忽略掉该字段。由于是JAVA关键字因此也会影响该字段其余序列化操做。blog
方法3、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的时候带上,这里是可变参数,因此能够同时指定多个,即以下这种写法:get
1 SimplePropertyPreFilter filter = new SimplePropertyPreFilter("PHONE", "SEX");
注:这里的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。ast
方法4、FastJson的属性过滤器class
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 }