1.基本使用
GSON库主要就是可以将一段JSON格式的字符串自动映射成一个对象或者一个集合,从而不需要我们再手动去编写代码进行解析了。
不过需要添加相关依赖 implementation 'com.google.code.gson:gson:2.8.2'
{"name":"Tom","age":20}
定义一个 Person 类,并加入 name 和 age 两字段,然后只需调用如下代码就可以将 JSON 数据自动解析成一个 Person 对象:
Gson gson = new Gson();
Person person = gson.fromJson(jsonData,Person.class);
若解析一段 JSON 数组会麻烦些,需要借助 TypeToken 把期望解析成的数据类型传入到 fromJson() 方法中:
List<Person> people = gson.fromJson(jsonData,new TypeToken<List<Person>>(){}.getType());
GSON 的基本用法就是这样。下面来解析上面的 JSON 文本,首先新增一个 Student 类:
public class Student {
private String id;
private String name;
private String sex;
// Getter and Setter
. . .
}
private void parseJSONWithGSON(String jsonData){
Gson gson = new Gson();
List<Student>studentList = gson.fromJson(jsonData,new TypeToken<List<Student>>(){}.getType());
}
2.@SerializedName注解
使用Gson解析json成对象时默认的是将json里对应字段的值解析到java对象里对应字段的属性里面。
但是经常会遇到我们自己定义的java对象里的属性名跟json里的字段名是不一样的,这时我们就可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来,JSON字段和Java字段之间建立映射关系。
“basic”:{
"city":"上海",
"id":"CN0000001",
"update":"2016-08-08 21:58"
}
正常使用Basic类:
public class Basic {
public String city;
public String id;
public String update;
}
Basic类要这样写才能直接使用Gson直接解析出来,但是这样对属性命名显然不太友好。
使用@SerializedName的Basic类:
public class Basic {
@SerializedName("city")
public String cityName;
@SerializedName("id")
public String weatherId;
@SerializedName("update")
public String updateTime;
}
使用Gson解析的时候就会将city对应的值赋值到cityName属性上,同样的如果我们要将Basic生成json字符串使用Gson生成的时候也会将cityName的名字生成city,这样就解决了java对象里属性名跟json里字段名不匹配的情况了。