java bean物件轉換json物件時過濾空值
阿新 • • 發佈:2019-01-01
由於從資料庫獲取到的總是有空值或者”“的情況,而且從資料庫獲取到資料封裝到java中,再轉換成json資料格式,這種事情已經司空見慣了。
但是在某些特定的場合下json資料中空值或者”“的會影響專案的執行,查錯的情況下也不直觀。例如下面這種情況下
上圖只是json的一小部分,後面還有很多沒有截出來。寫過微信公眾號的應該知道這是自定義選單的json資料格式,但是其中有些屬性是多餘的。所以空值和”“還有空list都需要從該json資料段中去除。
我處理json是用json-lib包。以下是獲取資料到輸出的步驟
- 從資料庫中獲取javabean資料
- 建立JsonConfig物件
- 建立PropertyFilter匿名內部類,並設定規則
- 把PropertyFilter物件填充到JsonConfig物件中
- javabean轉換為json
- 輸出json
其中建立PropertyFilter匿名內部類,並設定規則是重中之重,PropertyFilter是一個介面,裡面只有一個apply方法,返回值是boolean,返回true時過濾該屬性。PropertyFilter原始碼如下
JsonObject中呼叫的程式碼如下
當沒有設定JsonPropertyFilter時,跳過該程式碼段。如果設定了,就呼叫apply方法,返回false時,跳過該程式碼段,當apply方法返回true時跳出該迴圈(即不解析該屬性,直接處理下一屬性)。
完整程式碼
@Test
public void createMenuTest(){
CustomMenuService customMenuService = (CustomMenuService) context.getBean("customMenuService");
List<CustomMenuCreate> menus = customMenuService.getCreateMenu();
//設定過濾json格式
JsonConfig jsonConfig = new JsonConfig();
PropertyFilter filter = new PropertyFilter() {
public boolean apply(Object object, String fieldName, Object fieldValue) {
if(fieldValue instanceof List){
List<Object> list = (List<Object>) fieldValue;
if (list.size()==0) {
return true;
}
}
return null == fieldValue || "".equals(fieldValue);
}
};
jsonConfig.setJsonPropertyFilter(filter);
JSONArray jsonArray = JSONArray.fromObject(menus,jsonConfig);
JSONObject jsonObject = new JSONObject();
jsonObject.put("button", jsonArray);
System.out.println(jsonArray.toString());
}