概述

当在 Java 项目中使用 Gson 库处理 JSON 时,我们可以将原始 JSON 字符串转换成更容易使用的类对象或数据结构。如将 JSON 字符串转换为 **Map<String, Object>** 对象,或者其他自定义类型的对象。但有些时候将 JSON 字符串转换为通用对象会更方便使用。

本文将演示如何使用 Gson 将 JSON 字符串转为 **JsonObject** 对象。

配置Maven依赖

首先,在 pom.xml 文件中配置 gson 依赖项:

1
2
3
4
5
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.1</version>
</dependency>

gson 版本根据实际情况进行选择,建议使用最新版本(见 Maven Central )。

本文使用的是 2.9.1 版本(当前最新版本)。

方法一:JsonParser

先使用 JsonParser 类的 parseString() 方法将 JSON 字符串转化 JsonElement 类型,再调用 JsonElement 类的 getAsJsonObject() 方法,即可得到 JsonObject 类对象。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
String strJson = "{\"id\":20990981,\"name\":\"Johnson\",\"tag\":\"Javaer,Student\",\"platform\":\"AL\"}";
JsonElement jsonElement = JsonParser.parseString(strJson);
JsonObject jsonObject = jsonElement.getAsJsonObject();

System.out.println(jsonObject.get("id").getAsInt());
System.out.println(jsonObject.get("name").getAsString());
System.out.println(jsonObject.get("tag").getAsString());
System.out.println(jsonObject.get("platform").getAsString());
System.out.println();
}

/*
此代码示例执行结果如下:

20990981
Johnson
Javaer,Student
AL

*/

方法二:fromJson

使用 Gson 对象的 fromJson() 方法,该方法将指定的 JSON 字符串反序列化为指定类的对象。

如以下示例代码展示了如何将 JSON 字符串反序列化为 JsonObject 类对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
String strJson = "{\"id\":20990981,\"name\":\"Johnson\",\"tag\":\"Javaer,Student\",\"platform\":\"AL\"}";
JsonElement jsonElement = JsonParser.parseString(strJson);
JsonObject jsonObject = new Gson().fromJson(strJson, JsonObject.class);

System.out.println(jsonObject.get("id").getAsInt());
System.out.println(jsonObject.get("name").getAsString());
System.out.println(jsonObject.get("tag").getAsString());
System.out.println(jsonObject.get("platform").getAsString());
System.out.println();
}

/*
此代码示例执行结果如下:

20990981
Johnson
Javaer,Student
AL

*/

小结

本文讲述了在 Java 项目中使用 Gson 库将 JSON 格式的字符串转为 JsonObject 对象的两种不同的方法。我们可以根据实际需要选择最合适的方法。

P.S. 本文示例代码托管在 GitHub 上。

(END)