天天看點

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>

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>

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>

1、 将java對象到xml

主要運用的是xmlserializer的write方法,這個方法可以完成java對象到xml的轉換,不過你很容易就可以看到這個xml序列化對象,需要先将java對象轉成json對象,然後再将json轉換吃xml文檔。

主要運用到xmlserializer的read方法,将xml内容讀取後,轉換成java對象。運作後結果如下:

3、 将xml的字元串内容,轉換成java的array對象

上面是一段xml字元串格式的文檔,将其轉換為jsonarray對象。轉換後結果如下:

就是一個數組;