天天看點

JSON-lib架構,轉換JSON、XML不再困難

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包:

JSON-lib架構,轉換JSON、XML不再困難

當然你也可以用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對象。轉換後結果如下:

就是一個數組;