本文出自: 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包:
當然你也可以用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對象。轉換後結果如下:
就是一個數組;