天天看點

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

本文出自: http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html

json-lib可以将java對象轉成json格式的字元串,也可以将java對象轉換成xml格式的文檔,同樣可以将json字元串轉換成java對象或是将xml字元串轉換成java對象。

一、 準備工作

1、 首先要去官方下載下傳json-lib工具包

下載下傳位址:

http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/

目前最新的是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

官方網址:http://json-lib.sourceforge.net/

然後在工程中添加如下jar包:

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

當然你也可以用2.4的json-lib庫

你可以在這裡看看官方提供的示例:

http://json-lib.sourceforge.net/usage.html

由于本次介紹的示例需要junit工具,是以你還需要添加junit的jar檔案,版本是4.8.2版本的,下載下傳位址:https://github.com/kentbeck/junit/downloads

如果你還不了解json是什麼?那麼你應該可以看看http://www.json.org/json-zh.html

2、 要轉換的javabean的代碼如下:

注意,上面的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];

如果你還想了解更多json方面的知識,請看:http://www.json.org/json-zh.html

除了上面的jsonarray、jsonobject可以将java對象轉換成json或是相反,将json字元串轉換成java對象,還有一個對象也可以完成上面的功能,它就是jsonserializer;下面我們就來看看它們是怎麼玩轉java對象和json的。

二、 java對象序列化成json對象

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字元串的轉換。

三、 json對象反序列化成java對象

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集合 

四、 json-lib對xml的支援

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對象。轉換後結果如下:

就是一個數組;