1. 简介
GSON(Google JSON)是 Google 提供的用于在 Java 中处理 JSON 数据的库。它允许 Java 对象与 JSON 之间进行序列化和反序列化,支持简单对象、集合、泛型和复杂数据结构的转换。GSON 轻量、高效、易用,是 Java 开发中处理 JSON 的常见选择。
2. 目录
- GSON 简介
- GSON 安装
- 基本用法
- Java 对象转换为 JSON
- JSON 转换为 Java 对象
- 复杂 JSON 解析
- 解析 JSON 数组
- 解析嵌套 JSON
- 解析泛型对象
- 自定义序列化与反序列化
- GSON 高级特性
- 最佳实践
- 总结
- 参考资料
3. GSON 安装
Maven 依赖
如果你使用 Maven,可以在 pom.xml
文件中添加:
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Gradle 依赖
dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
}
手动下载
如果不使用构建工具,可以从 GSON 官方 GitHub 下载 .jar
并添加到项目的 lib
目录中。
4. 基本用法
Java 对象转换为 JSON(序列化)
import com.google.gson.Gson;
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class GsonExample {
public static void main(String[] args) {
Gson gson = new Gson();
Person person = new Person("张三", 25);
String json = gson.toJson(person);
System.out.println(json); // {"name":"张三","age":25}
}
}
JSON 转换为 Java 对象(反序列化)
import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
String json = "{\"name\":\"张三\",\"age\":25}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.name + " - " + person.age);
}
}
5. 复杂 JSON 解析
解析 JSON 数组
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class GsonArrayExample {
public static void main(String[] args) {
String json = "[{\"name\":\"张三\",\"age\":25}, {\"name\":\"李四\",\"age\":30}]";
Gson gson = new Gson();
Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> personList = gson.fromJson(json, listType);
for (Person p : personList) {
System.out.println(p.name + " - " + p.age);
}
}
}
解析嵌套 JSON
class Address {
String city;
String country;
}
class User {
String name;
int age;
Address address;
}
public class GsonNestedExample {
public static void main(String[] args) {
String json = "{ \"name\": \"张三\", \"age\": 25, \"address\": { \"city\": \"北京\", \"country\": \"中国\" } }";
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
System.out.println(user.name + " - " + user.address.city);
}
}
解析泛型对象
class Response<T> {
int code;
T data;
}
public class GsonGenericExample {
public static void main(String[] args) {
String json = "{ \"code\": 200, \"data\": { \"name\": \"张三\", \"age\": 25 } }";
Gson gson = new Gson();
Type type = new TypeToken<Response<Person>>() {}.getType();
Response<Person> response = gson.fromJson(json, type);
System.out.println(response.code + " - " + response.data.name);
}
}
6. 自定义序列化与反序列化
有时,我们需要自定义 JSON 的格式。例如,修改日期格式或忽略某些字段。
忽略某些字段
import com.google.gson.annotations.Expose;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class User {
@Expose
String name;
@Expose
int age;
String password;
}
public class GsonCustomSerialization {
public static void main(String[] args) {
User user = new User();
user.name = "张三";
user.age = 25;
user.password = "secret";
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(gson.toJson(user)); // {"name":"张三","age":25}
}
}
自定义日期格式
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;
class Event {
String name;
Date date;
}
public class GsonDateFormatExample {
public static void main(String[] args) {
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
Event event = new Event();
event.name = "会议";
event.date = new Date();
String json = gson.toJson(event);
System.out.println(json);
}
}
7. GSON 高级特性
GsonBuilder
配置:可以启用更强大的特性,如setPrettyPrinting()
(美化 JSON)、serializeNulls()
(序列化 null 值)。- 流式解析:使用
JsonReader
和JsonWriter
进行高效的流式 JSON 解析。 - 自定义类型适配器:可以创建
TypeAdapter<T>
来控制序列化和反序列化过程。
8. 最佳实践
- 使用
GsonBuilder
来控制序列化规则(例如忽略null
值)。 - 在复杂数据结构中使用
TypeToken<T>
解析泛型对象。 - 使用
@Expose
注解 保护敏感数据,防止某些字段被序列化。 - 处理 JSON 异常,避免
JsonSyntaxException
和NullPointerException
。 - 使用流式解析 处理大规模 JSON 数据,提高性能。
9. 总结
GSON 是 Java 处理 JSON 的强大工具,提供了简单易用的 API 来完成对象与 JSON 之间的转换。本文涵盖了基本使用、复杂解析、自定义序列化、以及最佳实践,希望能帮助你在 Java 项目中高效使用 GSON。