1. 概述
在 Java 中使用 Gson 处理 JSON 数据时,我们有多种方式将原始 JSON 字符串转换成更易于操作的类或数据结构。
比如我们可以:
不过有时候,我们希望直接将 JSON 转换为一个通用的对象结构,这时候 JsonObject
就派上用场了。
本文就来介绍如何使用 Gson 将 JSON 字符串解析为 JsonObject
。
2. Maven 依赖
首先,确保项目中引入了 Gson 的依赖。在 pom.xml
中添加如下内容:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
你可以随时在 Maven Central 查看 Gson 的最新版本。
3. 使用 JsonParser
第一种方式是通过 JsonParser
类将 JSON 字符串解析为 JsonObject
,这个过程分为两步:
第一步:解析为 JsonElement
Gson 提供了 JsonParser.parseString()
方法,它会将 JSON 字符串解析成一个 JsonElement
树结构:
public static JsonElement parseString(String json) throws JsonSyntaxException
第二步:转换为 JsonObject
调用 JsonElement.getAsJsonObject()
方法即可获取最终的 JsonObject
实例。
来看一个示例:
String json = "{ \"name\": \"Baeldung\", \"java\": true }";
JsonObject jsonObject = JsonParser.parseString(json)
.getAsJsonObject();
assertTrue(jsonObject.isJsonObject());
assertEquals("Baeldung", jsonObject.get("name")
.getAsString());
assertTrue(jsonObject.get("java")
.getAsBoolean());
✅ 优点:逻辑清晰,适合中间处理步骤较多的场景
❌ 缺点:多了一步转换,代码略显啰嗦
4. 使用 Gson.fromJson()
第二种方式更简单粗暴,直接使用 Gson
实例的 fromJson()
方法,一步到位。
该方法签名如下:
public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException
只需将 JsonObject.class
作为目标类型传入即可:
String json = "{ \"name\": \"Baeldung\", \"java\": true }";
JsonObject convertedObject = new Gson().fromJson(json, JsonObject.class);
assertTrue(convertedObject.isJsonObject());
assertEquals("Baeldung", convertedObject.get("name")
.getAsString());
assertTrue(convertedObject.get("java")
.getAsBoolean());
✅ 优点:代码简洁,一步到位
⚠️ 注意:适合直接使用 JsonObject
的场景,如果后续需要转为自定义类,建议用 fromJson(json, MyClass.class)
5. 总结
本文介绍了两种使用 Gson 将 JSON 字符串转换为 JsonObject
的方式:
方法 | 说明 | 适用场景 |
---|---|---|
JsonParser.parseString().getAsJsonObject() |
分步解析,逻辑清晰 | 需要对 JSON 做中间处理时推荐 |
new Gson().fromJson(json, JsonObject.class) |
一步到位,代码简洁 | 直接使用 JsonObject 时更方便 |
两种方法各有千秋,选哪个取决于你的使用场景。
📌 示例代码可以在 GitHub 上找到:https://github.com/eugenp/tutorials/tree/master/json-modules/gson