FastJson 過濾屬性,方法,巢狀物件屬性

2021-10-03 19:49:35 字數 1346 閱讀 3149

2023年真是複雜的一年啊,疫情鬧得沸沸揚揚,但願可以早點消停吧。

在給別的服務提供介面的時候,由於返回的資料過多,所以要優化去除多餘的字段,方法

第一種(註解)

在物件響應欄位前加註解,這樣生成的json也不包含該欄位。

@jsonfield(serialize=false)

private string name;

第二種(使用fastjson的***)

propertyfilter profilter = new propertyfilter()  

return true;

} };

json = json.tojsonstring(user, profilter);

system.out.println(json);

第三種(使用transient修飾屬性)

在物件對應字段前面加transient,表示該欄位不用序列化,即在生成json的時候就不會包含該字段了。

private transient string name;

第四種(只返回需要的字段)

這裡說一下不管是集合還是物件都是一樣的;

******propertyprefilter filter = new ******propertyprefilter(user.class, 「id」,「username」);

jsonobject.tojsonstring(user,filter);

特殊情況 巢狀層物件的

如果需要過濾深層的物件屬性 :

方法一:只返回物件和包含物件需要的屬性

******propertyprefilter filter1 = new ******propertyprefilter(ttown1.class, 「id」,「townname」);

******propertyprefilter filter2 = new ******propertyprefilter(ttown2.class, 「id」,「townname」);

serializefilter filters=new serializefilter;

system.out.println(jsonobject.tojsonstring(result, filters));

方法一:參考第二種***的使用,直接寫包含物件的欄位名,注意這裡會有個問題,如果 a物件包含b物件, 且a ,b 物件 都有name 字段,這時使用第二種方法會將a,b的name欄位都過濾掉,根據場景選擇使用

特殊情況 關於方法的過濾

在你物件中有一些方法的時候,你會發現在你序列化的時候,會多出一些字段,這就是跟你的方法有關,這裡如果需要去掉這些多餘的返回值,參考第二種,直接將方法名過濾即可;

fastjson 屬性大寫問題

fastjson 的屬性預設是首字母小寫的駝峰式分隔,所以如果首字母是大寫的話生成的json 串 有大寫的也有小寫的 小寫是不要的 在其get 方法前宣告下 jsonfield name bpm 相當於重新命名了 public class targetpoint implements seriali...

fastjson常用方法

首先定義乙個實體類,用於我們進行物件與json之間的轉換。public class bean jsonfield name key2 public string getkey2 public string setkey1 string key1 public string setkey2 strin...

fastjson 過濾掉不需要序列化的屬性

第一種方式,使用propertyfilter。可根據屬性名稱或屬性值進行過濾。propertyfilter filter new propertyfilter false 無需序列化,不過濾出來 return false serializewriter out new serializewriter...