如何将LinkedTreeMap转换为gson的JsonObject?

35
对于Java数据处理程序,我发送正确格式的JSON,但Spring、Java决定如何转换它所看到的内容以及我不该更改的框架将其缠绕为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的方法,不需要内部引号?


可能相关:https://dev59.com/fGEh5IYBdhLWcg3wjEDn - Nivas
我不明白。你是想要获取一个“字符串”吗?那么只需将LinkedTreeMap传递给toJson即可。 - Sotirios Delimanolis
我正在想方设法获取一个JsonObject,因为我没有找到任何直接从LinkedTreeMap转换为JsonObject的方法,所以我开始研究字符串操作,因为有一种正确的方法可以将字符串转换为JsonObject。 - Bronanaza
你是如何得到一个 LinkedTreeMap 的?直接反序列化为 JsonObject 就可以了。 - Sotirios Delimanolis
LinkedTreeMap是我从“Spring、Java决定如何转换它所看到的内容以及我不应该去更改的框架”的组合中获得的。第一次访问数据时,它已经是一个LinkedTreeMap了,如果你可以直接将LinkedTreeMap反序列化为JsonObject,那就是问题的答案。 - Bronanaza
1个回答

74

通常需要将对象序列化为JSON,然后将该JSON解析回一个JsonObject。幸运的是,Gson提供了一个toJsonTree方法,可以跳过这种解析。

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

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

gson.fromJson(theJson, JsonObject.class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接