Gson
前言
Gson 是 Google 提供的轻量级 JSON 处理库,广泛用于 Java 项目中,特别是 Spring Boot 项目。Gson 支持对象与 JSON 之间的转换、复杂数据结构的处理,以及与 Java 集合的互转。
# 一、引入 Gson 依赖
在 Maven 项目中,可以通过以下依赖引入 Gson:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 二、将对象转换为 JSON 字符串
Gson 提供了一个简单的 Gson
类,用于将 Java 对象序列化为 JSON 字符串。
代码示例:
import com.google.gson.Gson;
public class GsonObjectToJsonExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// 创建一个对象
User user = new User("张三", 25);
// 将对象转换为 JSON 字符串
String jsonString = gson.toJson(user);
System.out.println("对象转 JSON 字符串: " + jsonString);
}
}
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter 和 setter 省略
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
输出结果:
{
"name": "张三",
"age": 25
}
1
2
3
4
2
3
4
重要参数说明:
toJson(Object src)
: 将对象序列化为 JSON 字符串。src
是要转换的对象。
# 三、将 JSON 字符串转换为对象
Gson 同样支持将 JSON 字符串反序列化为 Java 对象。
代码示例:
import com.google.gson.Gson;
public class GsonJsonToObjectExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// JSON 字符串
String jsonString = "{\"name\":\"张三\",\"age\":25}";
// 将 JSON 字符串转换为对象
User user = gson.fromJson(jsonString, User.class);
System.out.println("JSON 字符串转对象: " + user.getName() + ", " + user.getAge());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
输出结果:
JSON 字符串转对象: 张三, 25
1
重要参数说明:
fromJson(String json, Class<T> classOfT)
: 将 JSON 字符串反序列化为指定类型的对象。
# 四、处理复杂 JSON 数据结构
Gson 可以处理嵌套和复杂的 JSON 数据结构,适用于复杂场景。
# 1. 解析嵌套 JSON 结构
代码示例:
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class GsonNestedJsonExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// 嵌套的 JSON 字符串
String jsonString = "{\"name\":\"赵六\",\"age\":22,\"address\":{\"city\":\"上海\",\"zip\":\"200000\"}}";
// 将 JSON 字符串解析为 JsonObject
JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
// 访问 JSON 字段
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
String city = jsonObject.get("address").getAsJsonObject().get("city").getAsString();
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("城市: " + city);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
输出结果:
姓名: 赵六
年龄: 22
城市: 上海
1
2
3
2
3
重要参数说明:
get(String memberName)
: 获取指定字段的值。getAsString()
,getAsInt()
等方法用于将节点转换为具体的类型值。
# 2. 处理数组和集合
Gson 支持将 JSON 数据解析为数组或集合,并进行迭代操作。
代码示例:
import com.google.gson.Gson;
import com.google.gson.JsonArray;
public class GsonArrayExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// JSON 数组字符串
String jsonString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 将 JSON 字符串解析为 JsonArray
JsonArray jsonArray = gson.fromJson(jsonString, JsonArray.class);
// 遍历 JSON 数组
jsonArray.forEach(jsonElement -> {
String name = jsonElement.getAsJsonObject().get("name").getAsString();
int age = jsonElement.getAsJsonObject().get("age").getAsInt();
System.out.println("姓名: " + name + ", 年龄: " + age);
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
输出结果:
姓名: 张三, 年龄: 25
姓名: 李四, 年龄: 30
1
2
2
# 五、JSON 与 Java 集合的转换
Gson 可以轻松将 JSON 数据与 Java 集合(如 List
, Map
)之间进行互转。
# 1. JSON 字符串转 List
代码示例:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class GsonJsonToListExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// JSON 字符串
String jsonString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 定义 List 类型
Type listType = new TypeToken<List<User>>() {}.getType();
// 将 JSON 字符串转换为 List
List<User> users = gson.fromJson(jsonString, listType);
users.forEach(user -> System.out.println("姓名: " + user.getName() + ", 年龄: " + user.getAge()));
}
}
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter 和 setter 省略
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
输出结果:
姓名: 张三, 年龄: 25
姓名: 李四, 年龄: 30
1
2
2
重要参数说明:
fromJson(String json, Type typeOfT)
: 将 JSON 字符串反序列化为指定类型的对象(如List
,Map
等)。TypeToken
用于获取泛型类型。
# 2. JSON 字符串转 Map
代码示例:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class GsonJsonToMapExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// JSON 字符串
String jsonString = "{\"name\":\"张三\",\"age\":25,\"address\":\"北京\"}";
// 定义 Map 类型
Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
// 将 JSON 字符串转换为 Map
Map<String, Object> map = gson.fromJson(jsonString, mapType);
System.out.println("姓名: " + map.get("name"));
System.out.println("年龄: " + map.get("age"));
System.out.println("地址: " + map.get("address"));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
输出结果:
姓名: 张三
年龄: 25
地址: 北京
1
2
3
2
3
重要参数说明:
fromJson(String json, Type typeOfT)
: 将 JSON 字符串反序列化为指定类型的Map
。
# 3. 将 Java 对象转换为 JSON 字符串
同样,Gson 支持将 List
, Map
等 Java 集合对象转换为 JSON 字符串。
代码示例:
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class GsonMapToJsonExample {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// 创建一个 Map
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 25);
map.put("address", "北京");
// 将 Map 转换为 JSON 字符串
String jsonString = gson.toJson(map);
System.out.println("Map 转 JSON 字符串: " + jsonString);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
输出结果:
{
"name": "张三",
"age": 25,
"address": "北京"
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 六、格式化 JSON 输出
Gson 也支持格式化 JSON 数据的输出,以便更好地阅读和理解数据结构。
代码示例:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonJsonFormattingExample {
public static void main(String[] args) {
// 创建 Gson 实例并启用格式化输出
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// 创建一个对象
User user = new User("张三", 25);
// 将对象转换为格式化的 JSON 字符串
String jsonString = gson.toJson(user);
System.out.println("格式化 JSON 字符串: \n" + jsonString);
}
}
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter 和 setter 省略
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
输出结果:
{
"name": "张三",
"age": 25
}
1
2
3
4
2
3
4
重要参数说明:
setPrettyPrinting()
: 启用 JSON 字符串格式化输出,使其更具可读性。
总结
Gson 是一个轻量且功能强大的 JSON 处理库,广泛应用于 Java 项目中。通过以上示例,您可以轻松实现对象与 JSON 之间的互转,处理复杂的 JSON 数据结构,并进行格式化输出。在实际开发中,Gson 以其简单易用和灵活性成为处理 JSON 数据的优秀选择。
编辑此页 (opens new window)
上次更新: 2025/01/05, 02:09:04