如何将LinkedTreeMap转换为gson JsonObject

时间:2016-06-27 14:55:47

标签: java json string gson jsonobject

对于一个java数据处理程序,我发送格式正确的JSON,但是Spring,Java的组合决定如何构建它所看到的内容,而框架我真的不应该改变那个JSON,以便一旦我看到它,它变成了LinkedTreeMap,我需要将它转换为JsonObject。 这不是将JSON序列化/反序列化为java对象,它的“最终形式”是gson JsonObject,它需要能够处理任何有效的JSON。

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

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

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

你可以用“:”替换“=”,但是没有

的内部引号
new JsonParser().parse(gson.toJson(STRING)).getAsJsonObject()

策略。

是否有更直接的方法将LinkedTreeMap转换为JsonObject,或者将库内部引号转换为字符串,甚至是将sting转换为不需要内部引号的JsonObject的方法?

1 个答案:

答案 0 :(得分:29)

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

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

请注意,如果可以,只需使用

将JSON直接反序列化为JsonObject
gson.fromJson(theJson, JsonObject.class);