Gson用法整理

来源:互联网 发布:qq同步助手 mac 编辑:程序博客网 时间:2024/05/21 21:37

1 概述

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

解析需要注意:

1、类里面的属性名必须和json字段里面的key一模一样,或者使用@SerializedName指定别名和json中的名字一模一样。2、{} 代表一个对象 3、[]代表一个List4、如果不想些get/set方法,需要吧属性设置为public5、如果内部嵌套定义类,则此类必须是静态的,否则会出错

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<ComplexModel>>(){}.getType();List<ComplexModel> 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.PROTECTEDsetPrettyPrinting   对json执行格式化优化setVersion  序列化的时候会根据版本选择时候序列化此字段。serializeNulls 默认取值为null的对象,将不会出现在json中,此设置将取值为null的字段也输出到json字符串中

4 TypeAdapter

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

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

5 测试Demo地址

github

3 0
原创粉丝点击