您的位置:首页 > 其它

Gson用法整理

2016-03-22 17:21 260 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: