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 来指定目标