1. 程式人生 > >java bean物件轉換json物件時過濾空值

java bean物件轉換json物件時過濾空值

由於從資料庫獲取到的總是有空值或者”“的情況,而且從資料庫獲取到資料封裝到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()); }