Android - 将嵌套映射转换为JSON字符串

时间:2014-03-18 17:56:22

标签: java android json gson

我的应用使用this GsonRequest实施来执行HTTP请求。 一些请求参数不是简单的字符串键和字符串值,但是某些值也可以是映射。

例如:

{
    "Key1" : "value",
    "Key2" : {
        "Key2.1" : "value",
        "Key2.2" : "value",
        "Key2.2" : "value"
    },
    "Key3" : "value"
}

上面的JSON参数可以使用HashMap构建,如下所示:

Map<String, String> subMap = new HashMap<String, String>();

subMap.put("Key2.1", "value");
subMap.put("Key2.2", "value");
subMap.put("Key2.3", "value");

Map<String, String> map = new HashMap<String, String>();
map.put("Key1", "value");
map.put("Key2", subMap.toString());
map.put("Key3", "value");

然后我致电GsonRequest并传递map

但是,在发出请求时,发送的JSON实际上是:

{
    "Key1" : "value",
    "Key2" : "{Key2.1 = value, Key2.2 = value, Key2.2 = value}", <-- This is wrong
    "Key3" : "value"
}

我尝试使用JSONObject嵌套地图,但没有成功:

map.put("Key2.2", new JSONObject(subMap).toString());

将生成JSON:

...
"Key2" : "{\"Key2.1\" : \"value\", \"Key2.2\" : \"value\", \"Key2.2\" : \"value\"}",
...

这个看起来更好,如果我能逃脱斜线它是对的,但没有。

如何正确嵌套地图并正确获取JSON?

1 个答案:

答案 0 :(得分:1)

经过一段时间的思考,我意识到嵌套Strings是错误的,不应该使用。但我之所以使用它,是因为Request扩展的课程GsonRequest需要HashMap<String, String>地图参数。

我所做的是强制通过HashMap<String, Object>地图。我没想到它会起作用,但我需要尝试一下。它确实有效。