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 中,我们可以通过实现 JsonSerializer
和 JsonDeserializer
接口来实现自定义的序列化和反序列化逻辑。
下面是一个示例,演示了如何对 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();