1. 程式人生 > >java 將json字串轉成複雜物件

java 將json字串轉成複雜物件

簡單說明:

為了方便資料在客戶端及伺服器端的傳輸,有時候我們會用一些比較方便組織的資料型別,比如json、xml等傳給客戶端,客戶端也可以重新組織資料傳回伺服器端。JSON和XML提供了一套比較方便的資料組織形式。。並且有很多現成的類庫用於解析這些資料。。

本文是對net.sf.json使用後的總結。。目前官方開源的對json進行處理的專案很多,fastjson還有其它等等。。視自己處理問題的複雜程度考慮選擇使用不同的依賴包。。

如果使用maven構建專案,需要對以下兩個包進行依賴

  1. <dependency>
  2.     <groupId>net.sf.json-lib
    </groupId>
  3.     <artifactId>json-lib</artifactId>
  4.     <version>2.2.3</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>xom</groupId>
  8.     <artifactId>xom</artifactId>
  9.     <version>1.2.5</version>
  10. </dependency>
如果使用Eclipse自己構建專案,需要自己手動下載依賴包進行依賴。

示例程式:

1.將JSON組裝的實體資料型別轉換為Java中對應的簡單Bean物件(只包含簡單的資料型別)

  1. /** 
  2.  * 將json格式封裝的簡單實體型別資料轉換成簡單型別的javabean 
  3.  * @return 
  4.  */
  5. privatestatic Object JSON2SimpleBean() {  
  6.     String jsonStr = "{\"age\":23,\"id\":123,\"name\":\"tt_2009\"," +  
  7.             "\"province\":\"上海\",\"sex\":\"男\"}";  
  8.     JSONObject jsonBean = JSONObject.fromObject(jsonStr);  
  9.     return JSONObject.toBean(jsonBean, SimpleUser.class);  
  10. }  
以上程式碼是將Json資料串轉換成java中自定義的對應的簡單bean。SimpleUser看最後程式碼附錄。

2.將JSON組裝的複雜資料轉換成複雜的java資料實體(物件中包含其它複雜物件,如收貨地址用List儲存)

  1. /** 
  2.  * 將json格式封裝的複雜實體資料轉換成複雜型別的javabean 
  3.  * @return 
  4.  */
  5. privatestatic Object JSON2ComplexBean() {  
  6.     String jsonStr = "{\"address\":[\"北京\",\"上海\",\"廣州\"]," +  
  7.             "\"age\":23,\"id\":123,\"name\":\"tt_2009\",\"province\":\"上海\",\"sex\":\"男\"}";  
  8.     JSONObject jsonBean = JSONObject.fromObject(jsonStr);  
  9.     return JSONObject.toBean(jsonBean, ComplexUser.class);  
  10. }  
以上程式碼將json組裝的資料串轉換成java中自定義的複雜資料實體。ComplexUser看最後附錄程式碼。

3.將Json資料轉換成java中的List

  1. /** 
  2.  * 將json格式封裝的列表資料轉換成java的List資料 
  3.  * @return 
  4.  */
  5. privatestatic Object JSON2List() {  
  6.     String jsonArray =  
  7.             "[{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}," +  
  8.             "{\"age\":24,\"id\":123,\"name\":\"tt_2009_1\",\"province\":\"上海\",\"sex\":\"男\"}," +  
  9.             "{\"age\":32,\"id\":123,\"name\":\"tt_2009_9\",\"province\":\"上海\",\"sex\":\"男\"}]";  
  10.     return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());  
  11. }  
以上程式碼將json組裝的資料資料轉換成java中的list資料。對更復雜的資料處理,後續文章介紹,比如處理日期等格式的資料。

4.將json資料轉換成java中的Map。(注意key只能是字串)

  1. /** 
  2.  * 將json格式封裝的字串資料轉換成java中的Map資料 
  3.  * @return 
  4.  */
  5. privatestatic Map<String, SimpleUser> JSON2Map() {  
  6.     Map<String, SimpleUser> map = new HashMap<String, SimpleUser>();  
  7.     String jsonMapStr =  
  8.             "{\"tt_2009_4\":{\"age\":27,\"id\":123,\"name\":\"tt_2009_4\",\"province\":\"上海\",\"sex\":\"男\"}," +  
  9.             "\"tt_2009_6\":{\"age\":29,\"id\":123,\"name\":\"tt_2009_6\",\"province\":\"上海\",\"sex\":\"男\"}," +  
  10.             "\"tt_2009_0\":{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}}";  
  11.     JSONObject jsonMap = JSONObject.fromObject(jsonMapStr);  
  12.     Iterator<String> it = jsonMap.keys();  
  13.     while(it.hasNext()) {  
  14.         String key = (String) it.next();  
  15.         SimpleUser u = (SimpleUser) JSONObject.toBean(  
  16.                 JSONObject.fromObject(jsonMap.get(key)),  
  17.                 SimpleUser.class);  
  18.         map.put(key, u);  
  19.     }  
  20.     return map;  
  21. }  
以上實現的是將json組裝的key-value格式的資料轉換成java中的map。

附錄程式碼:

(setter、getter等方法省略掉了)

  1. /** 
  2.  * 只包含基本資料型別的簡單實體類 
  3.  * @author TT_2009 
  4.  */
  5. publicclass SimpleUser {  
  6.     privateint id;  
  7.     private String name;  
  8.     private String sex;  
  9.     privateint age;  
  10.     private String province;  
  11. }  

  1. /** 
  2.  * 包含複雜型別的實體類 
  3.  * @author TT_2009 
  4.  */
  5. publicclass ComplexUser extends SimpleUser {  
  6.     private List<String> address;  
  7.     public ComplexUser() {  
  8.     }  
  9.     public ComplexUser(int id, String name,  
  10.             String sex, int age, String province,  
  11.             List<String> address) {  
  12.         super(id, name, sex, age, province);  
  13.         this.address = address;  
  14.     }  
  15.     public List<String> getAddress() {  
  16.         return address;  
  17.     }  
  18.     publicvoid setAddress(List<String> address) {  
  19.         this.address = address;  
  20.     }