原文 :http://www.jianshu.com/p/558844c96fc1
1.概述
2.Gson的目标
3.Gson的性能和扩展性
4.Gson的使用者
5.如何使用Gson
- 通过Maven来使用Gson
- 基本举例
- 对象举例
- 使用对象的好处
- 嵌套类(包括内部类)
- 数组举例
- 集合举例
- 集合的局限性
- 泛型的序列化和反序列化
- 任意类型集合的序列化和反序列化
- 内置的序列化器和反序列化器
- 定制的序列化和反序列化
- 写一个序列化解释器
- 写一个反序列化解释器
- 写一个实例化工厂(Writing a Instance Creator)
- 一个参数化类型的实例工厂(InstanceCreator for a Parameterized Type)
- 简洁和美观的Json格式化输出
- 支持Null对象
- 支持版本化
- 忽略序列化和反序列化中的字段
- Java修饰符忽略
- Gson's @Expose
- 自定义忽略策略
- JSON字段取名帮助
- 通过经典的序列化器和反序列化器分享状态
- 流
6.在设计Gson中一些问题
7.未来Gson需要加强的方面
概述
Gson是一个Java库,它不仅可以把Java对象转化为Json格式,它也能将一段Json格式的字符串转化为相对于的Java对象。
Gson适用于所有Java对象,即使是那些你不知道源代码的对象。
Gson的目标
- 提供简单易用的方法比如 toString() ,构造方法来转化JAVA为JSON以及反转化。
- 提供已存在的不可修改对象转化为JSON以及反转化。
- 提供对象的惯例表示
- 支持任意复杂对象
- 生成健壮 可读的JSON输出
Gson的性能和扩展性
这里提供我们跑测试的电脑配置(dual opteron, 8GB RAM, 64-bit Ubuntu),你可以通过使用PerformanceTest类来运行测试
- 能正常反序列化25MB大小的字符串(参照 PerformanceTest中的disabled_testStringDeserializationPerformance)
- 超大集合:
- 能正常序列化一百四十万对象(参见PerformanceTest中的disabled_testLargeCollectionSerialization)
- 能正常反序列化87000个对象的集合(参见PerformanceTest中的disabled_testLargeCollectionDeserialization)
- Gson 1.4 将反序列的字节数组和集合限制从80KB提高到11MB。
注意:删除 disabled_前缀 来运行这些TEST,我们使用这个前缀来阻止运行这些测试样例当我们运行Junit的测试样例。
Gson的使用者
Gson最初创建是为了Google内部大量的项目所使用,它现在被很多的开源项目和公司使用。
使用Gson
你可以使用 new Gson()方法 作为使用Gson的开始。 还有一个类GsonBuilder来创建一个Gson实例, 通过这个类你可以设置各种参数包括版本控制等等...
当你调用Json操作时,Gson实例不会维护任何状态, 所以你可以所以复用相同的对象来重复Json的序列化和反序列操作。
通过Maven来使用Gson
通过Maven2/3来使用Gson, 添加下面的依赖来在Maven使用Gson<dependencies> <!-- Gson: Java to Json conversion --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.5</version> <scope>compile</scope> </dependency> </dependencies>
现在你的Maven项目就可以使用Gson
基础举例
// SerializationGson gson = new Gson();gson.toJson(1);// ==> 1 gson.toJson("abcd"); // ==> "abcd" gson.toJson(new Long(10)); // ==> 10 int[] values = { 1 }; gson.toJson(values); // ==> [1] // Deserialization 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);
对象举例
class BagOfPrimitives { private int value1 = 1; private String value2 = "abc"; private transient int value3 = 3; BagOfPrimitives() { // no-args constructor } } // Serialization BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); // ==> json is {"value1":1,"value2":"abc"}
注意 不要序列对象中使用循环引用,因为它将会导致无限递归// DeserializationBagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives