Android Bean 转 JSON

在 Android 开发中,我们经常需要将 Java 对象转换为 JSON 字符串,以便于在网络传输、存储或与其他平台进行数据交互。而 Android 提供的 Gson 库可以帮助我们很方便地实现这个功能。

Gson 简介

Gson 是 Google 提供的一个 Java 库,用于将 Java 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 Java 对象。它能够实现对象的序列化和反序列化,提供了简单易用的 API,使得我们可以很方便地操作 JSON 数据。

Gson 库可以通过在项目的 build.gradle 文件中添加以下依赖来引入:

dependencies {
    implementation 'com.google.code.gson:gson:2.8.6'
}

使用 Gson 进行 Bean 转 JSON

首先,我们需要定义一个 Java Bean 类,它将作为我们要转换为 JSON 的对象。例如,我们定义一个 Person 类:

public class Person {
    private String name;
    private int age;

    // 省略构造方法、getter 和 setter

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

接下来,我们可以使用 Gson 将该对象转换为 JSON 字符串。下面是一个示例代码:

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 25);

        Gson gson = new Gson();
        String json = gson.toJson(person);

        System.out.println(json);
    }
}

在上面的代码中,我们首先创建了一个 Person 对象,然后使用 Gson 对象的 toJson 方法将其转换为 JSON 字符串。最后,我们打印出这个 JSON 字符串。

运行上述代码,我们可以得到如下输出:

{
  "name": "Alice",
  "age": 25
}

Gson 的高级用法

处理复杂类型

Gson 不仅可以处理简单的 Java Bean 类型,还可以处理包含复杂类型(如嵌套对象、数组、集合等)的对象。下面是一个示例:

import java.util.ArrayList;
import java.util.List;

public class Company {
    private String name;
    private List<Person> employees;

    // 省略构造方法、getter 和 setter

    @Override
    public String toString() {
        return "Company{" +
                "name='" + name + '\'' +
                ", employees=" + employees +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Person employee1 = new Person("Alice", 25);
        Person employee2 = new Person("Bob", 30);

        List<Person> employees = new ArrayList<>();
        employees.add(employee1);
        employees.add(employee2);

        Company company = new Company("Google", employees);

        Gson gson = new Gson();
        String json = gson.toJson(company);

        System.out.println(json);
    }
}

运行上述代码,我们可以得到如下输出:

{
  "name": "Google",
  "employees": [
    {
      "name": "Alice",
      "age": 25
    },
    {
      "name": "Bob",
      "age": 30
    }
  ]
}

自定义序列化和反序列化

有时候,我们希望在对象转换为 JSON 字符串或从 JSON 字符串转换回对象时,对对象的某些字段进行自定义的处理。在 Gson 中,我们可以通过实现 JsonSerializerJsonDeserializer 接口来实现自定义的序列化和反序列化逻辑。

下面是一个示例,演示了如何对 Person 类的 age 字段进行加密和解密:

import com.google.gson.*;

import java.lang.reflect.Type;

public class PersonSerializer implements JsonSerializer<Person>, JsonDeserializer<Person> {
    private static final String SECRET_KEY = "my-secret-key";

    @Override
    public JsonElement serialize(Person person, Type type, JsonSerializationContext context) {
        Gson gson = new Gson();

        JsonObject jsonObject = gson.toJsonTree(person).getAsJsonObject();
        int encryptedAge = encrypt(person.getAge());

        jsonObject.addProperty("age", encryptedAge);

        return jsonObject;
    }

    @Override
    public Person deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = jsonElement.getAsJsonObject();