Gson
来源:互联网 发布:js input 禁止光标 编辑:程序博客网 时间:2024/06/16 15:45
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。
下面通过一个表格来了解一下,GSON目前的发展状况
初始版本2008年5月22日最新版本(稳定版本)2.2.4/2013年5月13日;2个月前编程语言Java操作平台各种平台许可协议Apache License 2.0官方网站http://code.google.com/p/google-gson/下载地址http://code.google.com/p/google-gson/downloads/listGSON帮助文档http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
下面通过一个表格来了解一下,GSON目前的发展状况
初始版本2008年5月22日最新版本(稳定版本)2.2.4/2013年5月13日;2个月前编程语言Java操作平台各种平台许可协议Apache License 2.0官方网站http://code.google.com/p/google-gson/下载地址http://code.google.com/p/google-gson/downloads/listGSON帮助文档http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
下图是,使用GSON转换时报的一个异常。
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:768) at com.google.gson.Gson.fromJson(Gson.java:717) at com.google.gson.Gson.fromJson(Gson.java:689) at com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54) at com.demoone.UseGson.main(UseGson.java:89) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 //注意这句话跟数组集合有关 at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165) ... 6 more
下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因
package com.demoone; import java.util.ArrayList; import java.util.List; import com.entity.Person; import com.google.gson.Gson; import com.google.gson.reflect.*; /*** * * 使用gson * 进行序列化,反序列化的操作 * json * * **/ public class UseGson { static Gson g=new Gson(); /** * * 由集合类型的实体类 * 转换成Json类型 * * **/ public static void testToJSON(){ List<Person> list=new ArrayList<>(); for(int i=0;i<2;i++){ Person p=new Person(i, "散仙"+i, "北京市"+i, "54152541@qq.com", 500.0); list.add(p); } String json=g.toJson(list); System.out.println(json); } /** * 由json转换为实体类 * * */ public static void testOneBeanFromJSON(){ /** * 转换一个Java Bean的时候 * 记住不能使用[],只有在使用集合的时候才可以使用 * 如上图贴的那个异常就是由此原因造成的,另外 * 格式要规范,中间不能出现空格字符 * * **/ String jsonBean="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}]"; Person p=g.fromJson(jsonBean, Person.class); System.out.println(p); } /** * 由json转换为实体类集合 * * */ public static void testListBeanFromJSON(){
/** * 转换一个集合 的实体Bean * 注意前面加上[]方括号,代表一个数组 **/ String jsonBeanList="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙1\",\"address\":\"北京市1\",\"email\":\"54152541@qq.com\",\"money\":500.0}]"; List<Person> lists=g.fromJson(jsonBeanList,new TypeToken<List<Person>>(){}.getType()); System.out.println("反序列之后"); for(Person pp:lists){ System.out.println(pp); } } public static void main(String[] args) { testListBeanFromJSON();//测试集合反序列化 testOneBeanFromJSON();//测试单个实体类反序列化 //testToJSON();//测试序列化 } }
运行结果:
testListBeanFromJSON() 方法: 反序列之后 编号:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 钱:500.0 编号:1 名字:散仙1 地址:北京市1 E-mail:54152541@qq.com 钱:500.0 testOneBeanFromJSON() 方法: 编号:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 钱:500.0
实体类Person:
package com.entity; /** * 实体类 * * * **/ public class Person { private int id; private String name; private String address; private String email; private double money; @Override public String toString() { // TODO Auto-generated method stub return "编号:"+id+" 名字:"+name+" 地址:"+address+" E-mail:"+email+" 钱:"+money; } public Person() { // TODO Auto-generated constructor stub } public Person(int id, String name, String address, String email, double money) { super(); this.id = id; this.name = name; this.address = address; this.email = email; this.money = money; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } }
体会到了GSON的强大了吧,GSON还可以使用注解简化,在这里笔者就不给出代码了,有兴趣的读者可以自己研究一下
包含jar,javadoc,source的压缩包,google-gson-2.2.2-release.zip下载:http://download.csdn.net/detail/u010122002/7729949
0 0
- Gson
- Gson
- Gson
- Gson
- GSON
- Gson
- Gson
- Gson
- Gson
- gson
- GSON
- Gson
- Gson
- Gson
- GSON
- gson
- gson
- Gson
- UITableViewCell自定义右边的文字以及更改左边图片的大小
- ORA-01000:超出打开游标的最大数 的解决办法(C#)
- 关于CPU Cache——程序猿需要知道的那些事
- IOS开发—CALayer介绍
- Android 你应该知道的学习资源 进阶之路贵在坚持
- Gson
- 实现从区间产生不重复的随机数 - JS 实现
- UGUI(三)无限循环列表
- keil5 pack install 下载地址
- Linux+Mono+Asp.net入门:05CentOs安装Mono(上)
- codeforces 474F F. Ant colony(线段树+数论)
- 2015 Chinajoy ShowGirl照片合集
- ListView的setSelection用法
- C#操作Excel文件