Gson用法整理

来源:互联网 发布:淘宝网11.11销售额 编辑:程序博客网 时间:2024/06/02 12:10

1 概述

Gson是Google提供的一款json解析工具,用来在Java对象和Json数据之前进行映射。其源代码位于github.

解析需要注意:

1、类里面的属性名必须和json字段里面的key一模一样,或者使用@SerializedName指定别名和json中的名字一模一样。
2、{} 代表一个对象
3、[]代表一个List
4、如果不想些get/set方法,需要吧属性设置为public

2 简单对象转化

Gson gson = new Gson();
//Model -> json, 其中myMode支持一般对象类型,内部可以包含对象嵌套,List对象类型等。
String json = gson.toJson(myModel);

//json->Model 1:myMode为简单对象,即内部不包含复杂对象嵌套
SimpleModel myModel = gson.fromJson(json, SimpleModel.class);

//json->ComplexModel 2:myMode为嵌套对象,或者List组合对象等
Type type = new TypeToken(List>(){}.getType();
List list = gson.fromJson(json, type);

3 Gson注解和GsonBuilder

@Expose
导出标记注解,配合GsonBuilder使用(excludeFieldsWithoutExposeAnnotation此设置就是不使用没有@Expose注解的属性)
@Expose (serialize = false, deserialize = false) ,serialize = false,
deserialize = false,序列化和反序列化的时候都不包含此字段。默认设置都是为true。
transient申明字段以此来说明序列化和反序列化都不包含这个字段。 @SerializedName(“name”)
指定别名,也就是json中名字为别名name,实际名字是属性中定义的名字。也就是说序列化的时候,这个属性的名字会被替换成name,解析的时候name会被替换成属性名。
@Since(version) 用于维护版本,从某个版本version开始,有这个字段.和setVersion配合使用。
@Until(version) 用于维护版本,到某个版本version为止,没有这个字段。和setVersion配合使用。

GsonBuilder用来自定义输出的json格式,解析说明:

excludeFieldsWithoutExposeAnnotation 不导出没有@Expose注解的属性
enableComplexMapKeySerialization 支持key为map的复杂对象形式
setDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”) 时间格式转化为制定格式
setFieldNamingPolicy(policy)
设置字段某些属性为policy,注:此注解对于实体上使用了@SerializedName注解的不会生效. policy取值如下:
FieldNamingPolicy.UPPER_CAMEL_CASE 首字母大写
FieldNamingPolicy.LOWER_CASE_WITH_DASHES 全部转为小写
FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES 全部转为大写

excludeFieldsWithModifiers(modifier) 某些修饰符的属性不导出,modify为:
Modifier.PRIVATE
Modifier.PUBLIC
Modifier.PROTECTED

setPrettyPrinting 对json执行格式化优化 setVersion 序列化的时候会根据版本选择时候序列化此字段。
serializeNulls 默认取值为null的对象,将不会出现在json中,此设置将取值为null的字段也输出到json字符串中

4 TypeAdapter
TypeAdapter是Gson实现解析的核心类。可以通过GsonBuilder.registerTypeAdapter来注册自己的TypeAdapter。

read 方法实现将json字符串反序列化为Java对象 write 方法实现将Java对象序列化为json字符串

文章来源:

http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/felix_wangq/article/details/49996385

0 0
原创粉丝点击