jsonlib中jsonConfig的配置

2021-06-27 19:54:04 字數 3376 閱讀 2884

json-lib的普及率應該還是比較廣的,不過在spring中倒是傾向於jackson,無奈新專案做到一般才知道jackson,所以還是依舊使用了json-lib~

在序列化的時候,比較常見的問題是資料庫為null的int型字段,被序列化後就賦值成0了,這在有些時候不是我們想看到的結果,那怎麼辦呢?

json-lib提供了jsonconfig物件供我們來自定義一些序列化時的操作:

jsonconfig.registerdefaultvalueprocessor(integer.class,

new defaultvalueprocessor()

});

也就是說,對於需要 序列化的物件的integer的字段來說,只要值為null(也就是integer的預設值),那麼在序列化成json的時候,該key的value則也會為null

我們可以通過以下**測試一下:

public static void main(string args) 

});employee employee = new employee();

employee.setname("zhu");

employee.setrole(1);

system.out.println(jsonobject.fromobject(employee));

system.out.println(jsonobject.fromobject(employee, jsonconfig));

}

輸出為:

考慮在序列化的時候我們可能並不想原模原樣的照著 物件 的值來序列化,也許我們想要玩點花樣?比如加個密啊,或者加個格式化的策略

就拿date型別來說吧,如果說按照預設的序列化策略,看看會是什麼結果:

}我想大多數情況下你應該不會是想要這種結果吧?格式化成「yyyy-mm-dd」這種格式也許是最常見的

那麼我們可以通過為date型別的字段配置乙個我們自己的processor:

首先,我們需要實現jsonvalueprocessor介面,這個介面有兩個方法需要實現:

public object processobjectvalue(string paramstring,object paramobject, jsonconfig paramjsonconfig);

public object processarrayvalue(object paramobject,jsonconfig paramjsonconfig);

當物件的某個屬性是該型別時,那麼呼叫processobjectvalue(...)方法來序列化該屬性

而當物件的某個屬性是該型別的陣列或list時,那麼呼叫processarrayvalue(...)方法來序列化該屬性

知道了這個,下面我們就來實現序列化中date型別的格式化吧,這裡對於date的陣列型別就不處理了,直接返回null:

public static void main(string args) 

string ret = null;

try catch (exception e)

return ret;

}@override

public object processarrayvalue(object paramobject,

jsonconfig paramjsonconfig)

});employee employee = new employee();

employee.setname("zhu");

employee.setrole(1);

employee.setbirthday(new date());

system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));

system.out.println("with jsonconfig:" + jsonobject.fromobject(employee, jsonconfig));

}

輸出結果是:

no jsonconfig:,"depno":"","empno":"","groupno":0,"name":"zhu","online":0,"phone":"","role":1}

with jsonconfig:

過濾某些不必要序列化的屬性有兩種方式:

1、給定乙個過濾條件,若滿足則被過濾掉2、直接指定需要過濾的屬性名

先來看看第一種:

public static void main(string args) 

});employee employee = new employee();

employee.setname("zhu");

employee.setrole(1);

system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));

system.out.println("with jsonconfig:" + jsonobject.fromobject(employee, jsonconfig));

}

輸出結果是:

no jsonconfig:

with jsonconfig:

第二種過濾方式,直接根據屬性的名稱:

public static void main(string args) );

employee employee = new employee();

employee.setname("zhu");

employee.setrole(1);

system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));

system.out.println("with jsonconfig:"

+ jsonobject.fromobject(employee, jsonconfig));

}

可以看到,這裡通過jsonconfig.setexcludes(new string);將double和boolean這兩個屬性

輸出結果:

no jsonconfig:

with jsonconfig:

json lib 解決級聯解析問題

b 問題解釋 b 級聯解析就是類間相互引用,比如說classa中有classb的引用,classb中也有classa的引用,這種情況在hibernate中的雙向關聯會很常見。如果是這種情況,在json lib解析的過程中,會出現net.sf.json.jsonexception there is a...

fastjson和json lib的區別

上次把原生json替換成了fastjson,發生很多地方不相容,對這個也做了一些總結 1 對於沒有賦值的變數處理,json lib會根據型別給出相應初始值,而fastjson直接忽略這個字段。解決方式 轉換時傳入兩個引數 serializerfeature.writemapnullvalue,ser...

如何用JsonLib 來實現EXT中的分頁?

先來看下最後我們要實現的結果是什麼樣?先說說我們傳統上的做法!我們一般會在後台中拼接json格式的字串,然後返回到前台進行解析,那樣雖然能達到目的,但效率上肯定會大打折扣 而今天我們介紹的是專門用來解析json格式的jsonlib,它所需要的jar檔案如下 行,廢話不多說了,上 首先來看前台頁面 e...