Jackson第一篇【JSON字符串、实体之间的相互转换】

既然你看到这篇文章相信你已经了解JSON的好处了,那么废话不多说直接进入主题。

Jackson是java中众多json处理工具的一个,比起常见的Json-lib,Gson要快一些。

Jackson的官网:http://jackson.codehaus.org/

里面可以下载Jackson的Jar包  注意jackson依赖:Apache的commons-loggin。

下面聊一下Jackson的常见用法==================================

Bean----->JSON

Java代码  复制代码
  1. public static String beanToJson(Object obj) throws IOException {   
  2.     // 这里异常都未进行处理,而且流的关闭也不规范。开发中请勿这样写,如果发生异常流关闭不了   
  3.         ObjectMapper mapper = CommonUtil.getMapperInstance(false);   
  4.         StringWriter writer = new StringWriter();   
  5.         JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);   
  6.         mapper.writeValue(gen, obj);   
  7.         gen.close();   
  8.         String json = writer.toString();   
  9.         writer.close();   
  10.         return json;   
  11.     }  
[java]  view plain copy
  1. public static String beanToJson(Object obj) throws IOException {  
  2.     // 这里异常都未进行处理,而且流的关闭也不规范。开发中请勿这样写,如果发生异常流关闭不了  
  3.         ObjectMapper mapper = CommonUtil.getMapperInstance(false);  
  4.         StringWriter writer = new StringWriter();  
  5.         JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);  
  6.         mapper.writeValue(gen, obj);  
  7.         gen.close();  
  8.         String json = writer.toString();  
  9.         writer.close();  
  10.         return json;  
  11.     }  

JSON------>Bean  

Java代码  复制代码
  1. public static Object  jsonToBean(String json, Class<?> cls) throws Exception {   
  2.     Object vo = mapper.readValue(json, cls);   
  3.     return vo;   
  4. }  
[java]  view plain copy
  1. public static Object  jsonToBean(String json, Class<?> cls) throws Exception {  
  2.     Object vo = mapper.readValue(json, cls);  
  3.     return vo;  
  4. }  

 

好了方法写完了咱们测试一下吧 看看他是否支持复杂类型的转换

Java代码  复制代码
  1. public static void main(String[] args) throws Exception {   
  2.     // 准备数据   
  3.     List<Person> pers = new ArrayList<Person>();   
  4.     Person p = new Person("张三"46);   
  5.     pers.add(p);   
  6.     p = new Person("李四"19);   
  7.     pers.add(p);   
  8.     p = new Person("王二麻子"23);   
  9.     pers.add(p);   
  10.     TestVo vo = new TestVo("一个容器而已", pers);   
  11.     // 实体转JSON字符串   
  12.     String json = beanToJson(vo);   
  13.     System.out.println("Bean>>>Json----" + json);   
  14.     // 字符串转实体   
  15.     TestVo vo2 = (TestVo)jsonToBean(json, TestVo.class);   
  16.     System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo));   
  17.   
  18. }  
[java]  view plain copy
  1. public static void main(String[] args) throws Exception {  
  2.     // 准备数据  
  3.     List<Person> pers = new ArrayList<Person>();  
  4.     Person p = new Person("张三"46);  
  5.     pers.add(p);  
  6.     p = new Person("李四"19);  
  7.     pers.add(p);  
  8.     p = new Person("王二麻子"23);  
  9.     pers.add(p);  
  10.     TestVo vo = new TestVo("一个容器而已", pers);  
  11.     // 实体转JSON字符串  
  12.     String json = beanToJson(vo);  
  13.     System.out.println("Bean>>>Json----" + json);  
  14.     // 字符串转实体  
  15.     TestVo vo2 = (TestVo)jsonToBean(json, TestVo.class);  
  16.     System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo));  
  17.   
  18. }  

  输出结果

Bean>>>Json----{"voName":"一个容器而已","pers":[{"name":"张三","age":46},{"name":"李四","age":19},{"name":"王二麻子","age":23}]}

Json>>Bean--与开始的对象是否相等:true

从结果可以看出从咱们转换的方法是对的,本文只是对Jackson的一个最简单的使用介绍。接下来的几篇文章咱们深入研究一下这玩意到底有多强大!

 

 

下面是本人涉及到的Bean 以及 CommonUtil

 

Java代码  复制代码
  1. public class CommonUtil {   
  2.     private static ObjectMapper mapper;   
  3.   
  4.     /**  
  5.      * 一个破ObjectMapper而已,你为什么不直接new 还搞的那么复杂。接下来的几篇文章我将和你一起研究这个令人蛋疼的问题  
  6.      *   
  7.      * @param createNew  
  8.      *          是否创建一个新的Mapper  
  9.      * @return  
  10.      */  
  11.     public static synchronized ObjectMapper getMapperInstance(boolean createNew) {   
  12.         if (createNew) {   
  13.             return new ObjectMapper();   
  14.         } else if (mapper == null) {   
  15.             mapper = new ObjectMapper();   
  16.         }   
  17.         return mapper;   
  18.     }   
  19. }  
[java]  view plain copy
  1. public class CommonUtil {  
  2.     private static ObjectMapper mapper;  
  3.   
  4.     /** 
  5.      * 一个破ObjectMapper而已,你为什么不直接new 还搞的那么复杂。接下来的几篇文章我将和你一起研究这个令人蛋疼的问题 
  6.      *  
  7.      * @param createNew 
  8.      *          是否创建一个新的Mapper 
  9.      * @return 
  10.      */  
  11.     public static synchronized ObjectMapper getMapperInstance(boolean createNew) {  
  12.         if (createNew) {  
  13.             return new ObjectMapper();  
  14.         } else if (mapper == null) {  
  15.             mapper = new ObjectMapper();  
  16.         }  
  17.         return mapper;  
  18.     }  
  19. }  

 

 

Java代码  复制代码
  1. public class Person {   
  2.     private String name;   
  3.     private int age;   
  4.   
  5.     public Person() {   
  6.     }   
  7.   
  8.     public Person(String name, int age) {   
  9.         super();   
  10.         this.name = name;   
  11.         this.age = age;   
  12.     }   
  13.   
  14.     public int getAge() {   
  15.         return age;   
  16.     }   
  17.   
  18.     public void setAge(int age) {   
  19.         this.age = age;   
  20.     }   
  21.   
  22.     public String getName() {   
  23.         return name;   
  24.     }   
  25.   
  26.     public void setName(String name) {   
  27.         this.name = name;   
  28.     }   
  29.   
  30.     @Override  
  31.     public boolean equals(Object obj) {   
  32.         if (this == obj) {   
  33.             return true;   
  34.         }   
  35.         if (obj == null) {   
  36.             return false;   
  37.         }   
  38.         if (getClass() != obj.getClass()) {   
  39.             return false;   
  40.         }   
  41.         Person other = (Person) obj;   
  42.         if (age != other.age) {   
  43.             return false;   
  44.         }   
  45.         if (name == null) {   
  46.             if (other.name != null) {   
  47.                 return false;   
  48.             }   
  49.         } else if (!name.equals(other.name)) {   
  50.             return false;   
  51.         }   
  52.         return true;   
  53.     }   
  54.   
  55. }  
[java]  view plain copy
  1. public class Person {  
  2.     private String name;  
  3.     private int age;  
  4.   
  5.     public Person() {  
  6.     }  
  7.   
  8.     public Person(String name, int age) {  
  9.         super();  
  10.         this.name = name;  
  11.         this.age = age;  
  12.     }  
  13.   
  14.     public int getAge() {  
  15.         return age;  
  16.     }  
  17.   
  18.     public void setAge(int age) {  
  19.         this.age = age;  
  20.     }  
  21.   
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.   
  26.     public void setName(String name) {  
  27.         this.name = name;  
  28.     }  
  29.   
  30.     @Override  
  31.     public boolean equals(Object obj) {  
  32.         if (this == obj) {  
  33.             return true;  
  34.         }  
  35.         if (obj == null) {  
  36.             return false;  
  37.         }  
  38.         if (getClass() != obj.getClass()) {  
  39.             return false;  
  40.         }  
  41.         Person other = (Person) obj;  
  42.         if (age != other.age) {  
  43.             return false;  
  44.         }  
  45.         if (name == null) {  
  46.             if (other.name != null) {  
  47.                 return false;  
  48.             }  
  49.         } else if (!name.equals(other.name)) {  
  50.             return false;  
  51.         }  
  52.         return true;  
  53.     }  
  54.   
  55. }  

Java代码  复制代码
  1. public class TestVo {   
  2.     private String voName;   
  3.     private List<Person> pers;   
  4.   
  5.     public TestVo() {   
  6.     }   
  7.   
  8.     public TestVo(String voName, List<Person> pers) {   
  9.         super();   
  10.         this.voName = voName;   
  11.         this.pers = pers;   
  12.     }   
  13.   
  14.     public String getVoName() {   
  15.         return voName;   
  16.     }   
  17.   
  18.     public void setVoName(String voName) {   
  19.         this.voName = voName;   
  20.     }   
  21.   
  22.     public List<Person> getPers() {   
  23.         return pers;   
  24.     }   
  25.   
  26.     public void setPers(List<Person> pers) {   
  27.         this.pers = pers;   
  28.     }   
  29.   
  30.     @Override  
  31.     public boolean equals(Object obj) {   
  32.         if (this == obj) {   
  33.             return true;   
  34.         }   
  35.         if (obj == null) {   
  36.             return false;   
  37.         }   
  38.         if (getClass() != obj.getClass()) {   
  39.             return false;   
  40.         }   
  41.         TestVo other = (TestVo) obj;   
  42.         if (pers == null) {   
  43.             if (other.pers != null) {   
  44.                 return false;   
  45.             }   
  46.         } else if (pers.size() != other.pers.size()) {   
  47.             return false;   
  48.         } else {   
  49.             for (int i = 0; i < pers.size(); i++) {   
  50.                 if (!pers.get(i).equals(other.pers.get(i))) {   
  51.                     return false;   
  52.                 }   
  53.             }   
  54.         }   
  55.         if (voName == null) {   
  56.             if (other.voName != null) {   
  57.                 return false;   
  58.             }   
  59.         } else if (!voName.equals(other.voName)) {   
  60.             return false;   
  61.         }   
  62.         return true;   
  63.     }   
  64. }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值