[TOC]
概述
本文主要讲述了如果使用gson来解析含有数组和对象等比较复杂的json,比如对象中含有对象,对象中有list等。首先会介绍如何在Android Studio中使用插件方便的将json映射成对象,然后使用gson实现对象和json的相互转化,最后会详细介绍如何使用泛型封装服务器回调。
如果需要手动解析请参考:Android手动创建和解析Json
A Java serialization/deserialization library to convert Java Objects into JSON and back
一个将Java对象转化成json的Java序列化/反序列化库。
gson主要是用用来解析json为对象和将对象转化成json。
gradle依赖
|
|
1 创建和json对应的对象
这个可以使用Android Studio的插件,这里推荐使用GsonFormat,直接在Android Studio的设置,插件中搜索GsonFormat,安装之后重启即可使用。新建一个Java类,点击菜单栏的code,Generate…,输入json字符串,在左下角的setting中可以勾选split generate,可以分开生成多个对象。
勾选use serializedName,可以选择自动添加serializedName注解,这是gson的注解,意思是序列化时的名字,json映射的是这个名字,而不是字段名,不加这个注解就是映射字段名。
以下面的json字符串为例:
|
|
生成的对象是
|
|
|
|
这样一个跟json对应得对象就创建好了。
2 使用gson解析json
2.1 解析对象
解析对象使用fromJson(String json, Class
|
|
2.2 解析数组
直接解析数组使用fromJson(String json, Type typeOfT)
这个Type,可以使用TypeToken类获得,比如new TypeToken<List<Student>>() {}.getType()
。
这里的例子我们要提高json的复杂度,下面这个json表示班级信息,有两个班级,A班和B班,每个班级有学生若干。
|
|
根据json创建相应的对象。我们发现,我们的json中含有Java关键字class,这个时候@SerializedName
注解就派上用场了,我们把字段给为clssX,同时注解里填上真实的名字class
。Student对象不变。
|
|
解析上面的json数组。
|
|
3 使用gson生成json
一般toJson(Object src)方法就够用了。
|
|
new Gson().toJson(Object src)输出的是没有格式化的json字符串,要是想输出格式化了的,可以使用
|
|
默认忽略空的字段,如果不想忽略,可以使用
|
|
4 特殊用法
不映射特定成员变量
加上@Expose
注解。然后使用的时候用如下语句创建gson对象。
|
|
不映射特定修饰符的成员变量
|
|
上面的代码会排除static
、transient
、volatile
修饰的成员变量。
指定排除策略
|
|
4 服务器json回调解析实例
这个比较复杂,放到了下一篇博客android使用gson和泛型解析服务器回调的封装