现在的位置: 首页 > 综合 > 正文

java 将json字符串转成复杂对象

2018年05月07日 ⁄ 综合 ⁄ 共 3994字 ⁄ 字号 评论关闭

简单说明:

为了方便数据在客户端及服务器端的传输,有时候我们会用一些比较方便组织的数据类型,比如json、xml等传给客户端,客户端也可以重新组织数据传回服务器端。JSON和XML提供了一套比较方便的数据组织形式。。并且有很多现成的类库用于解析这些数据。。

本文是对net.sf.json使用后的总结。。目前官方开源的对json进行处理的项目很多,fastjson还有其它等等。。视自己处理问题的复杂程度考虑选择使用不同的依赖包。。

如果使用maven构建项目,需要对以下两个包进行依赖

[html] view
plain
copy

  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对象(只包含简单的数据类型)

[java] view
plain
copy

  1. /** 
  2.  * 将json格式封装的简单实体类型数据转换成简单类型的javabean 
  3.  * @return 
  4.  */  
  5. private static 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存储)

[java] view
plain
copy

  1. /** 
  2.  * 将json格式封装的复杂实体数据转换成复杂类型的javabean 
  3.  * @return 
  4.  */  
  5. private static 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

[java] view
plain
copy

  1. /** 
  2.  * 将json格式封装的列表数据转换成java的List数据 
  3.  * @return 
  4.  */  
  5. private static 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.   
  11.     return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());  
  12. }  

以上代码将json组装的数据数据转换成java中的list数据。对更复杂的数据处理,后续文章介绍,比如处理日期等格式的数据。

4.将json数据转换成java中的Map。(注意key只能是字符串)

[java] view
plain
copy

  1. /** 
  2.  * 将json格式封装的字符串数据转换成java中的Map数据 
  3.  * @return 
  4.  */  
  5. private static 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等方法省略掉了)

[java] view
plain
copy

  1. /** 
  2.  * 只包含基本数据类型的简单实体类 
  3.  * @author TT_2009 
  4.  */  
  5. public class SimpleUser {  
  6.   
  7.     private int id;  
  8.   
  9.     private String name;  
  10.   
  11.     private String sex;  
  12.   
  13.     private int age;  
  14.   
  15.     private String province;  
  16.   
  17. }  


[java] view
plain
copy

  1. /** 
  2.  * 包含复杂类型的实体类 
  3.  * @author TT_2009 
  4.  */  
  5. public class ComplexUser extends SimpleUser {  
  6.   
  7.     private List<String> address;  
  8.   
  9.     public ComplexUser() {  
  10.     }  
  11.   
  12.     public ComplexUser(int id, String name,  
  13.             String sex, int age, String province,  
  14.             List<String> address) {  
  15.         super(id, name, sex, age, province);  
  16.         this.address = address;  
  17.     }  
  18.   
  19.     public List<String> getAddress() {  
  20.         return address;  
  21.     }  
  22.   
  23.     public void setAddress(List<String> address) {  
  24.         this.address = address;  
  25.     }  
  26.   

抱歉!评论已关闭.