如何将LinkedTreeMap转换为gson JsonObject

2022-09-01 06:34:09

对于Java数据处理程序,我发送格式正确的JSON,但是Spring,Java决定如何投射它所看到的东西,以及框架的组合,我真的不应该去改变JSON的mangle,这样一旦我可以看到它,它就会变成LinkedTreeMap,我需要把它转换成JsonObject。这不是将JSON序列化/反序列化为java对象,它的“最终形式”是一个gson JsonObject,它需要能够处理任何有效的JSON。

{
"key":"value",
"object": {
    "array":[
        "value1", 
        "please work"
        ]
    }
}

是我一直在使用的示例,一旦我看到它,它就是一个LinkedTreeMap,.toString()到

{key=value, object={array=[value1, please work]}}

其中,您可以将“=”替换为“:”,但这没有内部引号

new JsonParser().parse(gson.toJson(STRING)).getAsJsonObject()

策略。

有没有更直接的方法将LinkedTreeMap转换为JsonObject,或者使用库将内部引号添加到字符串中,甚至有一种方法可以将刺痛转换为不需要内部引号的JsonObject?


答案 1

通常必须将对象序列化为 JSON,然后将该 JSON 解析回 .幸运的是,它提供了一个跳过解析的toJsonTree方法。JsonObjectGson

LinkedTreeMap<?,?> yourMap = ...;
JsonObject jsonObject = gson.toJsonTree(yourMap).getAsJsonObject();

请注意,如果可以,只需将 JSON 直接反序列化为JsonObject

gson.fromJson(theJson, JsonObject.class);

答案 2