Gson:直接将String转换为JsonObject(无POJO)

7za*_*rk7 288 java json gson

似乎无法弄清楚这一点.我在GSON中尝试JSON树操作,但我有一个案例,我不知道或有一个POJO转换为字符串,在转换之前JsonObject.有没有办法直接从a StringJsonObject

我尝试了以下(Scala语法):

val gson = (new GsonBuilder).create

val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])
Run Code Online (Sandbox Code Playgroud)

a失败了,JSON被转义并解析为JsonString唯一,并 b返回一个空JsonObject.

有任何想法吗?

Dal*_*ass 509

使用JsonParser; 例如:

JsonParser parser = new JsonParser();
JsonObject o = parser.parse("{\"a\": \"A\"}").getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • 对JsonObject的强制转换是不必要的,最好使用`new JsonParser().parse(..).getAsJsonObject();` (43认同)
  • 呃应该有一个静态的1班机便利方法 (17认同)
  • 请注意,此方法现已弃用。使用`JsonParser.parseString(str).getAsJsonObject()`。 (13认同)

mav*_*ick 143

尝试使用getAsJsonObject()而不是在接受的答案中使用的直接演员:

JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • JsonParser().parse() 在较新版本的 Gson 中已弃用。使用`JsonObject jsonObj = JsonParser.parseString(str).getAsJsonObject()`或`Gson gson = new Gson(); JsonElement元素 = gson.fromJson(jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();` (4认同)
  • 由于某种原因,它包含`members`父键.以下是{"members"的示例:{"key1":"13756963814f2c594822982c0307fb81","key2":true,"key3":123456789}} (2认同)

Pur*_*ham 48

String jsonStr = "{\"a\": \"A\"}";

Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonStr, JsonElement.class);
JsonObject jsonObj = element.getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • 我已经验证了你的答案. (3认同)

Joz*_*ský 36

最简单的方法是使用JsonPrimitive派生自的类,JsonElement如下所示:

JsonElement element = new JsonPrimitive(yourString);
JsonObject result = element.getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • 这是最简单的答案并帮助了我.谢谢! (2认同)

Dan*_*nes 11

刚遇到同样的问题.您可以为JsonElement该类编写一个简单的自定义反序列化器:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

GsonBuilder gson_builder = new GsonBuilder();
gson_builder.registerTypeAdapter(
        JsonElement.class,
        new JsonDeserializer<JsonElement>() {
            @Override
            public JsonElement deserialize(JsonElement arg0,
                    Type arg1,
                    JsonDeserializationContext arg2)
                    throws JsonParseException {

                return arg0;
            }
        } );
String str = "{ \"a\": \"A\", \"b\": true }";
Gson gson = gson_builder.create();
JsonElement element = gson.fromJson(str, JsonElement.class);
JsonObject object = element.getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)


Ste*_*aul 6

JsonParser构造已被弃用。改用静态方法:

JsonObject asJsonObject = JsonParser.parseString(someString).getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)