Jackson和Gson的使用

杰克逊使用:

转自:HTTP://hi.baidu.com/woodcock1017/item/53c3761099ac74071894ec99

 

杰克逊使用备忘

杰克逊主要使用ObjectMapper对象来进行序列化以及反序列化操作。

使用杰克逊可以毫无压力的将复杂对象进行完全序列化,也可以将各种类型的对象反序列化

 

以下代码均省略异常处理

普通对象

序列化Order order对象:

ObjectMapper mapper = new ObjectMapper();

Writer strWriter = new StringWriter();

mapper.writeValue(strWriter,顺序);

String json = strWriter.toString();

 

反序列化:

Order order = mapper.readValue(json,Order.class);

 

链表,地图等

序列化List <Order> orderList:

ObjectMapper mapper = new ObjectMapper();

Writer strWriter = new StringWriter();

mapper.writeValue(strWriter,orderList);

String json = strWriter.toString();

 

 反序列化:

需要用到TypeReference

List <Order> orderList = mapper.readValue(json,new TypeReference <List <Order >>(){});  

如果反序列化为名单<LinkedHashMap的<字符串,字符串>>,则直接

List orderList = mapper.readValue(json,List.class);  

 

解析某个字段

JsonNode node = mapper.readTree(json);

String name = node.get(“name”);

 

GSON的使用:

转自:HTTP://www.iteye.com/topic/1131510

Gson(又称Google Gson)是Google公司发布的一个开源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串串成Java对象.GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。

下面通过一个表格来了解一下,GSON目前的发展状况


 

初始版本2008年5月22日
最新版本(稳定版本)2.8.2 / 2013年5月13日; 
编程语言Java的
操作平台各种平台
许可协议Apache许可证2.0
官方网站http://code.google.com/p/google-gson/
下载地址http://code.google.com/p/google-gson/downloads/list
GSON帮助文档http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html

 

 

 

 

 

下图是,使用GSON转换时报的一个异常。

 

 

 

 

 

的Java代码  收藏代码

  1. 线程“main”中的异常   com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_OBJECT,但是BEGIN_ARRAY在第  1  行第2 列   
  2.     在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:176 )  
  3.     在com.google.gson.Gson.fromJson(Gson.java:803 )  
  4.     在com.google.gson.Gson.fromJson(Gson.java:768 )  
  5.     在com.google.gson.Gson.fromJson(Gson.java:717 )  
  6.     在com.google.gson.Gson.fromJson(Gson.java:689 )  
  7.     在com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54 )  
  8.     在com.demoone.UseGson.main(UseGson.java:89 )  
  9. 引起:java.lang.IllegalStateException:预期的BEGIN_OBJECT,但是BEGIN_ARRAY在第  1  行第2 列  //注意这句话跟数组集合有关     
  10.     在com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374 )  
  11.     在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:165 )  
  12.     ...  6  更多  

 


下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因

 

 

的Java代码  收藏代码

  1. package  com.demoone;  
  2.   
  3. import  java.util.ArrayList;  
  4. import  java.util.List;  
  5.   
  6. 进口 com.entity.Person;  
  7. import  com.google.gson.Gson;  
  8. import  com.google.gson.reflect。*;  
  9.   
  10. / *** 
  11.  *  
  12.  *使用gson 
  13.  *进行序列化,反序列化的操作 
  14.  * json 
  15.  *  
  16.  * ** /  
  17. 公共 UseGson {   
  18.       
  19.  静态 Gson g = new  Gson();  
  20.  / ** 
  21.   *  
  22.   *由集合类型的实体类 
  23.   *转换成Json类型 
  24.   *  
  25.   * ** /  
  26.     public static void  testToJSON(){    
  27.           
  28.           
  29.         List <Person> list = new  ArrayList <>();  
  30.           
  31.         for int  i = 0 ; i < 2 ; i ++){  
  32.          Person p = new  Person(i,  “散仙” + i,  “北京市” + i,  “54152541@qq.com” ,  500.0 );  
  33.             list.add(P);  
  34.         }  
  35.         字符串json = g.toJson(list);  
  36.         的System.out.println(JSON);  
  37.           
  38.     }  
  39.       
  40.       
  41.     / ** 
  42.      *由json转换为实体类 
  43.      *  
  44.      * * /  
  45.     public static void  testOneBeanFromJSON(){    
  46.           
  47.        
  48.         / ** 
  49.          *转换一个Java Bean的时候 
  50.          *记住不能使用[],只有在使用集合的时候才可以使用  
  51.          *如上图贴的那个异常就是由此原因造成的,另外 
  52.          *格式要规范,中间不能出现空格字符 
  53.          *  
  54.          * ** /  
  55.         String jsonBean = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” 54152541@qq.com \“,\”money \“:500.0}]” ;  
  56.          人员P = g.fromJson(jsonBean,人。);  
  57.          的System.out.println(P);  
  58.    
  59.     }  
  60.       
  61.     / ** 
  62.      *由json转换为实体类集合 
  63.      *  
  64.      * * /  
  65.     public static void  testListBeanFromJSON(){    
  66.           
  67.        
  68.    
  69.           
  70.          / ** 
  71.           *转换一个集合的实体Bean 
  72.           *注意前面加上[]方括号,代表一个数组 
  73.           * ** /  
  74.      
  75.            
  76.             
  77.            
  78.          String jsonBeanList = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” 54152541@qq.com \ “\ ”钱\“:500.0},{\ ”ID \“:1,\ ”名称\“:\ ”散仙1 \“,\ ”地址\“:\”北京市1 \“,\”email \“:\”54152541@qq.com \“,\”money \“:500.0}]” ;  
  79.            
  80.          List <Person> lists = g.fromJson(jsonBeanList,new    TypeToken <List <Person >>(){}。getType());  
  81.          System.out.println(“反序列之后” );  
  82.          for (Person pp:lists){  
  83.                
  84.              的System.out.println(PP);  
  85.          }  
  86.     }  
  87.       
  88.       
  89.     public static void  main(String [] args){    
  90.           
  91.          testListBeanFromJSON(); //测试集合反序列化  
  92.          testOneBeanFromJSON(); //测试单个实体类反序列化  
  93.          // testToJSON(); //测试序列化  
  94.            
  95.     }  
  96.   
  97. }  


运行结果:

 

的Java代码  收藏代码

  1. testListBeanFromJSON()方法:  
  2. 反序列之后  
  3. 编号:0   名字:散仙0    地址:北京市0    电子邮件:54152541 @qq .com钱:500.0  
  4. 编号:1   名字:散仙1    地址:北京市1    电子邮件:54152541 @qq .com钱:500.0  
  5. testOneBeanFromJSON()方法:  
  6. 编号:0   名字:散仙0    地址:北京市0    电子邮件:54152541 @qq .com钱:500.0  




实体类人:

 

的Java代码  收藏代码

  1.  comcomity;  
  2.   
  3. / ** 
  4.  *实体类 
  5.  *  
  6.  *  
  7.  * ** /  
  8. public class  Person {   
  9.       
  10.     private int  id;   
  11.     私人 字符串名称;  
  12.     私人 字符串地址;  
  13.     私人 String电子邮件;  
  14.     私人 钱;   
  15.       
  16.     @覆盖  
  17.     public  String toString(){  
  18.         // TODO自动生成的方法存根  
  19.         返回“编号:” + id + “名字:” + name + “地址:” + address + “电子邮件:” + email + “钱:” + money;    
  20.     }  
  21.     public  Person(){  
  22.         // TODO自动生成的构造函数存根  
  23.     }  
  24.     公共 人(int  id,字符串名称,字符串地址,字符串电子邮件,  
  25.              钱){  
  26.         super ();  
  27.         这个.id = id;  
  28.         这个.name = name;  
  29.         这个.address = address;  
  30.         .email =电子邮件;  
  31.         这个.money =钱;  
  32.     }  
  33.     public int  getId(){   
  34.         返回 ID;  
  35.     }  
  36.     public void  setId(int  id){   
  37.         这个.id = id;  
  38.     }  
  39.     public  String getName(){  
  40.         返回 名称;  
  41.     }  
  42.     public void  setName(String name){   
  43.         这个.name = name;  
  44.     }  
  45.     public  String getAddress(){  
  46.         返回 地址;  
  47.     }  
  48.     public void  setAddress(String address){   
  49.         这个.address = address;  
  50.     }  
  51.     public  String getEmail(){  
  52.         回复 邮件;  
  53.     }  
  54.     public void  setEmail(String email){   
  55.         .email =电子邮件;  
  56.     }  
  57.     public double  getMoney(){   
  58.         回报 金钱;  
  59.     }  
  60.     public void  setMoney(double  money){   
  61.         这个.money =钱;  
  62.     }  
  63.       
  64.   
  65. }  

 

转载:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值