gson<二>

来源:互联网 发布:seo网络营销是什么 编辑:程序博客网 时间:2024/05/29 03:55

要使用gson需要com.gson包。
可以到Google的网站上去下载gson的jar包(URL:http://code.google.com/p/google-gson/downloads/list)。jar包导入项目的流程如下:
1. 新建libs文件夹,把下载的jar包添加到libs文件夹中
2. 右键gson-2.2.4.jar–> Build Path –> Add to Build Path(add操作之后就会看到Package视图下的Referenced Libraries下多了个gson-2.2.4jar,说明jar包添加成功)

在API level 11(3.0)以前有使用JSONReader的方法的话就要加上这个包,它也可以使用JSONReader方法来解析JSON字符串,方法和前面的一样。

Gson的官方文档说明在这里https://sites.google.com/site/gson/gson-user-guide#TOC-Overview。
翻译如下:

作者:Inderjeet Singh, Joel Leitch, Jesse Wilson
1、Overview(概览)
Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象。Gson是一个开源项目,托管于http://code.google.com/p/google-gson。
Gson可以用于任意的Java对象,包括已经存在但你没有对应源代码的对象。
2、Goals for Gson(Gson的目标)
* 提供像toString()和构造方法(工厂方法)一样简单使用的机制来将Java对象转换为JSON或者反过来将JSON转换为Java对象。
* 允许将已经存在并且不可修改的对象转换JSON,或者反过来。
* 允许为对象自定义映射关系。
* 支持任意复杂的对象。
* 生成紧凑又易读的JSON输出。
3、Gson Performance and Scalability(Gson的性能和可扩展性)
以下是我们在一个台式机(皓龙双核,8GB内存,64位Ubuntu系统)下进行大量测试得出的指标。你可以使用PerformanceTest类进行重新测试。
* String字符串:反序列化一个超过25MB的字符串没有任何问题(参考PerformanceTest类中的disabled_testStringDeserializationPerformance方法)。
* 大型集合对象:
** 序列化一个包含一百四十万个对象的集合(参考PerformanceTest中的disabled_testLargeCollectionSerialization方法)
** 反序列化一个包含八万七千个对象的集合(参考PerformanceTest中的disabled_testLargeCollectionDeserialization方法)
* Gson 1.4将字节数组和集合的限制从80KB提升到11MB。
注意:删除disabled_前缀后再运行测试。我们添加这个前缀是为了防止每一次运行JUnit测试都要将这些测试重新运行一遍。
4、Gson Users(Gson用户)
Gson原本是为Google内部大量项目创建使用的,但是现在已经有大量公司和公共项目都在实现,详细可查看这里。
5、Using Gson(Gson的使用)
Gson主要的类即为Gson类,你可以简单的使用new Gson()创建一个Gson对象。另外也可以使用GsonBuilder这个类,它允许使用参数(例如版本控制等等)来才创建一个Gson实例。
Gson实例并不会保存Json操作的状态。因此,你可以重用同一个Gson对象进行多次Json序列化和反序列化操作。
5.1 Primitives Examples(基本示例)
Gson gson = new Gson();
gson.toJson(1);==> 结果为 1
gson.toJson(“abcd”); ==> 结果为 “abcd”
gson.toJson(new Long(10)); ==> 结果为 10
int[] values = { 1 };
gson.toJson(values); ==> 结果为 [1]
(反序列化)
int one = gson.fromJson(“1”, int.class);
Integer one = gson.fromJson(“1”, Integer.class);
Long one = gson.fromJson(“1”, Long.class);
Boolean false = gson.fromJson(“false”, Boolean.class);
String str = gson.fromJson(“/”abc/”“, String.class);
String anotherStr = gson.fromJson(“[/”abc/”]”, String.class);
5.2 Object Examples(对象示例)
class BagOfPrimitives {
private int value1 = 1;
private String value2 = “abc”;
private transient int value3 = 3
BagOfPrimitives() {// no-args constructor}
}
(序列化)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==>结果为{“value1”:1,”value2”:”abc”}
注意,你不能序列化一个内部包含循环引用(比如包含自身引用)的对象,那会导致无限递归。
(反序列化)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
==> obj2对象与obj对象一样
5.2.1 Finer Points with Objects(关于对象的一些细节)
* 完美支持对象的私有成员变量。
* 不需要任何注解来声明一个成员变量是否需要进行序列化和反序列化。类中所有的成员变量(包括父类的成员)默认都要进行序列化和反序列化。
* 如果一个成员变量使用了transient关键字标识,默认情况下它将被忽略,将不会进行JSON的序列化和反序列化。
* 对于null值的正确处理:
** 进行序列化的时候,一个值为null的成员在输出中将被忽略。
** 进行反序列化的时候,对应JSON数据中丢失的成员变量将会使用null。
* 使用synthetic关键字标识的成员将被忽略,不进行JSON的序列化和反序列化。
* 对应外部类,内部类、匿名类和局部类中的成员将被忽略,不进行序列化和反序列化。
5.3 Nested Classes(including Inner Classes)—— 嵌套类(包括内部类)
Gson可以很容易的序列化静态嵌套类。
Gson也可以反序列化静态嵌套类。但是,Gson没办法自动序列化一个纯内部类。因为即使内部类的构造方法不需要参数,但实际上也需要一个外部类对象的引用。这个外部类对象在反序列化的时候已经是不可访问的了。你可以通过将内部类标识为静态类或者提供自定义的InstanceCreator来解决这个问题。以下是例子:
public class A {
public String a;
class B {
public String b;
public B() {
// No args constructor for B}
}
}
注意:上面的类B默认情况下不能使用Gson序列化。
Gson没办法将{“b”:”abc”}反序列化为B类的实例,因为B是一个内部类。如果使用static class B将B类标识为静态内部类,那么Gson就能够将这个字符串反序列化为B类的实例。另一种解决方法是为B类写一个自定义的InstanceCreator:
public class InstanceCreatorForB implements InstanceCreator

0 0
原创粉丝点击