📅  最后修改于: 2023-12-03 15:07:36.960000             🧑  作者: Mango
GSON 是 Google 提供的一个开源的 Java 库,用于将 Java 对象序列化为 JSON 字符串,或将 JSON 字符串反序列化为 Java 对象。
在项目的 build.gradle
文件中添加以下依赖:
implementation 'com.google.code.gson:gson:2.8.6'
创建需要序列化或反序列化的 Java 类,其中考虑到字段名与 JSON 字段名不一致的情况,需要在字段上使用 @SerializedName
注解来指定 JSON 字段名。例如:
public class User {
@SerializedName("name")
private String userName;
@SerializedName("age")
private int userAge;
// ... 省略其他字段
// ... 省略构造方法和 getter/setter 方法
}
将 Java 对象序列化为 JSON 字符串,可以使用 GSON 提供的 Gson
类。例如:
User user = new User("Tom", 20, /*...*/);
Gson gson = new Gson();
String jsonStr = gson.toJson(user);
上述代码会将 user
对象序列化为一个 JSON 字符串。
将 JSON 字符串反序列化为 Java 对象,也可以使用 Gson
类。例如:
String jsonStr = "{\"name\":\"Tom\", \"age\": 20, /*...*/ }"; // 一个 JSON 字符串
Gson gson = new Gson();
User user = gson.fromJson(jsonStr, User.class);
上述代码会将 jsonStr
字符串反序列化为一个 User
对象。
对于一些字段名都符合命名规范的 Java 类,可以使用 GSON 的自动命名策略来简化开发。例如:
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) // 自动将 Java 字段名转为下划线命名的 JSON 字段名
.create();
而如果 Java 类中有一些字段需要特殊的序列化或反序列化逻辑(例如日期格式化、特定类型的处理等),可以使用 GSON 的自定义 TypeAdapter
来实现。例如:
public class DateTypeAdapter extends TypeAdapter<Date> {
@Override
public void write(JsonWriter out, Date value) throws IOException {
out.value(String.valueOf(value.getTime() / 1000)); // 将日期转为时间戳
}
@Override
public Date read(JsonReader in) throws IOException {
long timestamp = in.nextLong(); // 从时间戳转为日期
return new Date(timestamp * 1000);
}
}
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateTypeAdapter()) // 注册自定义 TypeAdapter
.create();