【发布时间】:2014-02-10 10:46:38
【问题描述】:
我有一个 JSON 对象的映射如下:
Map<String,Object> map = HashMap<String,Object>();
map.put("first_name", "prod");
JSONObject jsonObj = new JSONObject("some complex json string here");
map.put("data", jsonObj);
Gson gson = new Gson();
String result = gson.toJson(map);
现在如果“这里有一些复杂的 JSON 字符串”是:
{"sender":{"id":"test test"},"recipients":{"id":"test1 test1"} }
并执行上面的代码给了我类似的东西:
{
"first_name": "prod",
"data": {
"map": {
"sender": {
"map": {
"id": "test test"
}
}
},
"recipients": {
"map": {
"id": "test1 test1"
}
}
}
}
}
我可能有一些语法错误,但基本上我不知道为什么我看到对象包裹在 map 周围。
更新
根据 cmets,混合不同的 json 解析器是个坏主意。 我能理解。但我的情况需要调用一个外部 api,它采用最终使用 gson 反序列化的对象的哈希映射。
是否有任何其他对象床边 JSONObject 我可以添加到地图中,并且仍然让 gson 在没有额外“地图”结构的情况下从中创建 json?我明白我可以创建 java bean 并实现这一点。但我正在寻找一种更简单的方法,因为我的数据结构可能很复杂。
更新2
退一步,我得到了一个 xml 字符串。我已经将它们转换为 json 对象。 现在我必须使用一个外部 api 来获取一个地图,然后在外部服务中使用 gson 将其转换为 json 字符串。
所以我得到了一个 xml 数据结构,但我需要将映射传递给该函数。当使用 gson 转换为 json 字符串时,我上面描述的方式会产生额外的“地图”结构。我无法控制更改外部服务的行为方式(例如,使用 gson 转换地图)。
【问题讨论】:
-
混合来自两个不同 JSON 解析库的类是灾难的根源。
-
您必须向我们提供
HashMap内容的示例以及您要添加的内容。不清楚你到底想要什么。 -
我正在尝试创建一个哈希图,以后可以使用 gson 将其转换为 json 字符串。但出于我的需要,我需要创建该地图,而不是 json 字符串。我只需要知道这张地图“可以”使用 gson 转换为 json 字符串,并带有额外的“地图”