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


原始标题:Convert String to JsonObject with Gson | Baeldung