FastJson序列化時過濾字段(屬性)的方法總結

  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         }
相關文章
相關標籤/搜索