Json-lib可以将Java對象轉成json格式的字元串,也可以将Java對象轉換成xml格式的文檔,同樣可以将json字元串轉換成Java對象或是将xml字元串轉換成Java對象。
<b>一、 </b><b>準備工作</b><b> </b>
<b> </b>
1、 首先要去官方下載下傳json-lib工具包
下載下傳位址:
<a href="http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/">http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/</a>
目前最新的是2.4的版本,本示例中使用的是v2.3;json-lib還需要以下依賴包:
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
然後在工程中添加如下jar包:

當然你也可以用2.4的json-lib庫
你可以在這裡看看官方提供的示例:
<a href="http://json-lib.sourceforge.net/usage.html">http://json-lib.sourceforge.net/usage.html</a>
2、 要轉換的JavaBean的代碼如下:
Birthday.java
注意,上面的getter、setter方法省略了,自己建構下。
3、 建立JsonlibTest測試類,基本代碼如下:
上面的init會在每個方法之前運作,destory會在每個方法完成後執行。分别用到了junit的@Before、@After注解,如果你對junit的這些注解不是很了解,可以看看junit官方的測試用例的example和doc;
JSONObject是将Java對象轉換成一個json的Object形式,JSONArray是将一個Java對象轉換成json的Array格式。
那什麼是json的Object形式、Array形式?
用通俗易懂的方法将,所謂的json的Object形式就是一個花括号裡面存放的如JavaMap的鍵值對,如:{name:’hoojo’, age: 24};
那麼json的Array形式呢?
就是中括号,括起來的數組。如:[ ‘json’, true, 22];
除了上面的JSONArray、JSONObject可以将Java對象轉換成JSON或是相反,将JSON字元串轉換成Java對象,還有一個對象也可以完成上面的功能,它就是JSONSerializer;下面我們就來看看它們是怎麼玩轉Java對象和JSON的。
<b>二、 </b><b>Java</b><b>對象序列化成</b><b>JSON</b><b>對象</b><b></b>
1、 将JavaObject轉換吃JSON字元串
在JsonlibTest中添加如下代碼:
fromObject将Java對象轉換成json字元串,toBean将json對象轉換成Java對象;
上面方法值得注意的是使用了JsonConfig這個對象,這個對象可以在序列化的時候對JavaObject的資料進行處理、過濾等
上面的jsonConfig的registerJsonValueProcessor方法可以完成對象值的處理和修改,比如處理生日為null時,給一個特定的值。同樣setJsonPropertyFilter和setJavaPropertyFilter都是完成對轉換後的值的處理。
運作上面的代碼可以在控制台看到如下結果:
2、 将JavaList集合轉換吃JSON字元串
運作此方法後,可以看到控制台輸出:
如果你是轉換List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。如果你用JSONObject.fromObject方法轉換List會出現異常,通常使用JSONSrializer這個JSON序列化的方法,它會自動識别你傳遞的對象的類型,然後轉換成相應的JSON字元串。
3、 将Map集合轉換成JSON對象
上面的Map集合有JavaBean、String、Boolean、Integer、以及Array和js的function函數的字元串。
運作上面的程式,結果如下:
4、 将更多類型轉換成JSON
運作後結果如下:
這裡還有一個JSONFunction的對象,可以轉換JavaScript的function。可以擷取方法參數和方法體。同時,還可以用JSONObject、JSONArray建構Java對象,完成Java對象到JSON字元串的轉換。
<b>三、 </b><b>JSON</b><b>對象反序列化成</b><b>Java</b><b>對象</b><b></b>
1、 将json字元串轉成Java對象
運作後,結果如下:
2、 将json字元串轉換成動态Java對象(MorphDynaBean)
轉換後的對象Object是一個MorphDynaBean的動态JavaBean,通過PropertyUtils可以獲得指定的屬性的值。
3、 将json字元串轉成Java的Array數組
運作的結果如下:
4、 将JSON字元串轉成Java的List集合
5、 将json字元串轉換成Collection接口
剛才上面的将json轉換成list提示該方法過時,這裡有toCollection,可以用此方法代替toList方法;運作後結果如下:
6、 将json字元串轉換成Map集合
<b>四、 </b><b>JSON-lib</b><b>對</b><b>XML</b><b>的支援</b><b></b>
1、 将Java對象到XML
主要運用的是XMLSerializer的write方法,這個方法可以完成java對象到xml的轉換,不過你很容易就可以看到這個xml序列化對象,需要先将java對象轉成json對象,然後再将json轉換吃xml文檔。
上面的節點名稱有點亂,你可以通過setElementName設定節點名稱
2、 将XML轉換成Java對象
主要運用到XMLSerializer的read方法,将xml内容讀取後,轉換成Java對象。運作後結果如下:
3、 将xml的字元串内容,轉換成Java的Array對象
上面是一段xml字元串格式的文檔,将其轉換為JSONArray對象。轉換後結果如下:
就是一個數組;