Android 添加 Gson 库
在 Android 开发中,我们常常需要将对象转换为 JSON 字符串,或者将 JSON 字符串转换为对象。为了方便地处理 JSON 数据,我们可以使用 Gson 库。Gson 是 Google 推出的一个 Java 库,用于将 Java 对象与 JSON 数据互相转换。本文将介绍如何在 Android 项目中添加 Gson 库,并使用 Gson 完成 JSON 数据的解析与生成。
添加 Gson 库
要在 Android 项目中使用 Gson 库,我们首先需要在项目的 build.gradle 文件中添加 Gson 的依赖。
dependencies {
// ...
implementation 'com.google.code.gson:gson:2.8.6'
}
然后,点击 "Sync Now" 完成 Gradle 同步。
使用 Gson 库
解析 JSON 数据为对象
首先,我们来看如何将 JSON 数据解析为对象。假设我们有一个 JSON 字符串如下:
{
"name": "John",
"age": 25,
"email": "john@example.com"
}
我们可以定义一个类来表示这个 JSON 数据的结构:
public class Person {
private String name;
private int age;
private String email;
// getter 和 setter 方法省略...
}
然后,我们可以使用 Gson 来将这个 JSON 字符串解析为一个 Person 对象:
String json = "{\"name\":\"John\",\"age\":25,\"email\":\"john@example.com\"}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
在上面的代码中,我们首先创建了一个 Gson 对象。然后,我们调用 fromJson
方法,将 JSON 字符串和目标对象的类型传递进去。Gson 会自动将 JSON 数据的字段与目标对象的属性进行匹配,并将值赋给属性。最后,我们就可以通过 getter 方法获取解析后的对象了。
生成 JSON 字符串
除了将 JSON 字符串解析为对象,我们还可以使用 Gson 来生成 JSON 字符串。假设我们有一个 Person 对象:
Person person = new Person();
person.setName("John");
person.setAge(25);
person.setEmail("john@example.com");
我们可以使用 Gson 将这个对象转换为 JSON 字符串:
Gson gson = new Gson();
String json = gson.toJson(person);
在上面的代码中,我们调用 toJson
方法,将 Person 对象传递进去,Gson 会自动将对象转换为 JSON 字符串。
高级用法
Gson 还提供了一些高级用法,例如处理日期、自定义字段名等。下面是一些示例代码:
处理日期
如果 JSON 数据中包含日期字段,我们可以使用 @SerializedName
注解指定日期的格式,然后在目标类中定义一个自定义的日期格式化器:
public class Person {
private String name;
private int age;
@SerializedName(value = "birthday", alternate = {"birthdate"})
private Date birthDate;
// getter 和 setter 方法省略...
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
public static final Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> {
try {
return dateFormat.parse(json.getAsString());
} catch (ParseException e) {
throw new JsonParseException(e);
}
})
.registerTypeAdapter(Date.class, (JsonSerializer<Date>) (src, typeOfSrc, context) ->
new JsonPrimitive(dateFormat.format(src)))
.create();
}
在上面的代码中,我们使用 @SerializedName
注解来指定日期字段的名称,以及可能的备选名称。然后,我们定义了一个自定义的日期格式化器,用于将日期转换为字符串和将字符串转换为日期。最后,我们在 GsonBuilder
中注册了这个日期格式化器,并创建了一个 Gson 对象。
处理复杂类型
如果 JSON 数据中包含复杂类型,例如集合、嵌套对象等,我们可以使用 Gson 的 TypeToken
来指定目标类型:
String jsonArray = "[{\"name\":\"John\",\"age\":25},{\"name\":\"Alice\",\"age\":30}]";
Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> personList = gson.fromJson(jsonArray, listType);
在上面的代码中,我们首先定义了一个 JSON 数组。然后,我们使用 TypeToken
来指定目标