用jackson包实现json、对象、Map之间的转换

主要用于测试学习用jackson包实现json、对象、Map之间的转换。

1、准备测试用的Java类

(1)Link类

Java代码  收藏代码
  1. package test;  
  2.   
  3. /**  
  4.  * Description: 联系方式,被user使用 
  5.  */  
  6. public class Link  
  7. {  
  8.     private String phone; //移动电话  
  9.     private String address; //地址  
  10.     private String qq; //QQ  
  11.       
  12.     public String getPhone()  
  13.     {  
  14.         return phone;  
  15.     }  
  16.     public void setPhone(String phone)  
  17.     {  
  18.         this.phone = phone;  
  19.     }  
  20.     public String getAddress()  
  21.     {  
  22.         return address;  
  23.     }  
  24.     public void setAddress(String address)  
  25.     {  
  26.         this.address = address;  
  27.     }  
  28.     public String getQq()  
  29.     {  
  30.         return qq;  
  31.     }  
  32.     public void setQq(String qq)  
  33.     {  
  34.         this.qq = qq;  
  35.     }  
  36. }  

 

(2)User类

 

Java代码  收藏代码

  1. package test;  
  2.   
  3. import java.util.Date;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import java.util.Set;  
  7.   
  8. /**  
  9.  * Description: 用户,测试模型类 
  10.  */  
  11. public class User  
  12. {  
  13.     private String id; //标识  
  14.     private String name;    //姓名  
  15.     private int age;    //年龄  
  16.     private double pay; //工资   
  17.     private boolean valid;  //是否有效  
  18.     private char one; //一个字符  
  19.     private Date birthday;  //生日  
  20.       
  21.     private Link link; //联系方式,自定义  
  22.       
  23.     private Map map; //测试用  
  24.     private List list; //测试用  
  25.     private Set set; //测试用  
  26.     public String getId()  
  27.     {  
  28.         return id;  
  29.     }  
  30.     public void setId(String id)  
  31.     {  
  32.         this.id = id;  
  33.     }  
  34.     public String getName()  
  35.     {  
  36.         return name;  
  37.     }  
  38.     public void setName(String name)  
  39.     {  
  40.         this.name = name;  
  41.     }  
  42.     public int getAge()  
  43.     {  
  44.         return age;  
  45.     }  
  46.     public void setAge(int age)  
  47.     {  
  48.         this.age = age;  
  49.     }  
  50.     public double getPay()  
  51.     {  
  52.         return pay;  
  53.     }  
  54.     public void setPay(double pay)  
  55.     {  
  56.         this.pay = pay;  
  57.     }  
  58.     public boolean isValid()  
  59.     {  
  60.         return valid;  
  61.     }  
  62.     public void setValid(boolean valid)  
  63.     {  
  64.         this.valid = valid;  
  65.     }  
  66.     public char getOne()  
  67.     {  
  68.         return one;  
  69.     }  
  70.     public void setOne(char one)  
  71.     {  
  72.         this.one = one;  
  73.     }  
  74.     public Date getBirthday()  
  75.     {  
  76.         return birthday;  
  77.     }  
  78.     public void setBirthday(Date birthday)  
  79.     {  
  80.         this.birthday = birthday;  
  81.     }  
  82.     public Link getLink()  
  83.     {  
  84.         return link;  
  85.     }  
  86.     public void setLink(Link link)  
  87.     {  
  88.         this.link = link;  
  89.     }  
  90.     public Map getMap()  
  91.     {  
  92.         return map;  
  93.     }  
  94.     public void setMap(Map map)  
  95.     {  
  96.         this.map = map;  
  97.     }  
  98.     public List getList()  
  99.     {  
  100.         return list;  
  101.     }  
  102.     public void setList(List list)  
  103.     {  
  104.         this.list = list;  
  105.     }  
  106.     public Set getSet()  
  107.     {  
  108.         return set;  
  109.     }  
  110.     public void setSet(Set set)  
  111.     {  
  112.         this.set = set;  
  113.     }  
  114. }  

 

2、测试类,没用Junit,用Main()方法输出。

Java代码  收藏代码
  1. package test;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.HashSet;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10. import java.util.Set;  
  11. import org.codehaus.jackson.JsonGenerationException;  
  12. import org.codehaus.jackson.map.JsonMappingException;  
  13. import org.codehaus.jackson.map.ObjectMapper;  
  14.   
  15. /**  
  16.  * Description: 主要用于测试学习用jackson包实现json、对象、Map之间的转换 
  17.  *  
  18.  * Date: 2016年6月6日 
  19.  * Time: 下午3:23:23 
  20.  */  
  21. public class JsonTest  
  22. {  
  23.   
  24.     public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException  
  25.     {  
  26.         User user=new User();  
  27.         user.setId("01");  
  28.         user.setName("张三");  
  29.         user.setAge(33);  
  30.         user.setPay(6666.88);  
  31.         user.setValid(true);  
  32.         user.setOne('E');  
  33.         user.setBirthday(new Date(20l*366*24*3600*1000)); //1990年  
  34.           
  35.         Link link = new Link();  
  36.         link.setAddress("河南省济源市");  
  37.         link.setPhone("13899995555");  
  38.         link.setQq("123456");  
  39.         user.setLink(link);  
  40.           
  41.         Map map=new HashMap();  
  42.         map.put("aa", "this is aa");  
  43.         map.put("bb", "this is bb");  
  44.         map.put("cc", "this is cc");  
  45.         user.setMap(map);  
  46.           
  47.         List list=new ArrayList(){};  
  48.         list.add("普洱");  
  49.         list.add("大红袍");  
  50.         user.setList(list);  
  51.           
  52.         Set set=new HashSet();  
  53.         set.add("篮球");  
  54.         set.add("足球");  
  55.         set.add("乒乓球");  
  56.         user.setSet(set);  
  57.           
  58.         ObjectMapper mapper = new ObjectMapper(); //转换器  
  59.           
  60.         //测试01:对象--json  
  61.         String json=mapper.writeValueAsString(user); //将对象转换成json  
  62.         System.out.println(json);  
  63.         /* 结果如下: 
  64.         {"id":"01","name":"张三","age":33,"pay":6666.88,"valid":true,"one":"E","birthday":1465185448998, 
  65.         "link":{"phone":"13899995555","address":"河南省济源市","qq":"123456"}, 
  66.         "map":{"aa":"this is aa","bb":"this is bb","cc":"this is cc"}, 
  67.         "list":["普洱","大红袍"], 
  68.         "set":["乒乓球","足球","篮球"]} 
  69.          
  70.         注意点:(1) 日期--长整型 (2)List、Set均转成数组 
  71.          */  
  72.           
  73.         //测试02:json--map  
  74.         Map m = mapper.readValue(json, Map.class); //json转换成map  
  75.           
  76.         System.out.println("pay:"+m.get("pay").getClass().getName()); //java.lang.Double  
  77.         System.out.println("valid:"+m.get("valid").getClass().getName()); //java.lang.Boolean  
  78.         System.out.println("birthday:"+m.get("birthday").getClass().getName()); //java.lang.Long  
  79.         System.out.println("link:"+m.get("link").getClass().getName()); //java.util.LinkedHashMap  
  80.         System.out.println("map:"+m.get("map").getClass().getName()); //java.util.LinkedHashMap  
  81.         System.out.println("list:"+m.get("list").getClass().getName()); //java.util.ArrayList  
  82.         System.out.println("set:"+m.get("set").getClass().getName()); //java.util.ArrayList  
  83.         /*  结果如下: 
  84.             pay:java.lang.Double 
  85.             valid:java.lang.Boolean 
  86.             birthday:java.lang.Long 
  87.             link:java.util.LinkedHashMap 
  88.             map:java.util.LinkedHashMap 
  89.             list:java.util.ArrayList 
  90.             set:java.util.ArrayList 
  91.              
  92.             注意点:(1) 日期--长整型  (2)map、子对象均转换成了LinkedHashMap (3)List、Set均转成ArrayList 
  93.          */  
  94.           
  95.         //测试03:map--json  
  96.         json=mapper.writeValueAsString(m); //map转json  
  97.         System.out.println(json); //与之前格式完全相同,说明经过map转换后,信息没有丢失  
  98.           
  99.         //测试04:json--对象  
  100.         User u=mapper.readValue(json, User.class); //json转java对象。经测,转成对象后,一切恢复正常  
  101.         System.out.println("pay:"+u.getPay());  
  102.         System.out.println("valid:"+u.isValid());  
  103.         System.out.println("birthday:"+u.getBirthday());  
  104.         System.out.println("link:"+u.getLink());  
  105.         System.out.println("map:"+u.getMap());  
  106.         System.out.println("list:"+u.getList());  
  107.         System.out.println("set:"+u.getSet());  
  108.           
  109.         //测试05:其他转换  
  110.         byte[] data=mapper.writeValueAsBytes(u); //对象转成二进制数组  
  111.           
  112.           
  113.     }  
  114.   
  115. }  

 

3、输出结果

Other代码  收藏代码
  1. {"id":"01","name":"张三","age":33,"pay":6666.88,"valid":true,"one":"E","birthday":632448000000,"link":{"phone":"13899995555","address":"河南省济源市","qq":"123456"},"map":{"aa":"this is aa","bb":"this is bb","cc":"this is cc"},"list":["普洱","大红袍"],"set":["乒乓球","足球","篮球"]}  
  2. pay:java.lang.Double  
  3. valid:java.lang.Boolean  
  4. birthday:java.lang.Long  
  5. link:java.util.LinkedHashMap  
  6. map:java.util.LinkedHashMap  
  7. list:java.util.ArrayList  
  8. set:java.util.ArrayList  
  9. {"id":"01","name":"张三","age":33,"pay":6666.88,"valid":true,"one":"E","birthday":632448000000,"link":{"phone":"13899995555","address":"河南省济源市","qq":"123456"},"map":{"aa":"this is aa","bb":"this is bb","cc":"this is cc"},"list":["普洱","大红袍"],"set":["乒乓球","足球","篮球"]}  
  10. pay:6666.88  
  11. valid:true  
  12. birthday:Tue Jan 16 08:00:00 CST 1990  
  13. link:test.Link@350385f1  
  14. map:{aa=this is aa, bb=this is bb, cc=this is cc}  
  15. list:[普洱, 大红袍]  
  16. set:[足球, 乒乓球, 篮球]  

 

摘抄自:http://rsy.iteye.com/blog/2303323

posted @ 2018-01-08 14:07  流浪码工  阅读(23101)  评论(0编辑  收藏  举报