JSONArray针对不同API版本的奇怪行为

时间:2015-09-23 21:23:41

标签: android

我遇到了JSONArray的问题。我的JSONArray适用于API 22,但不适用于API小于22的设备。 当我改变我的编译sdk时,我得到了大量的错误。 这种奇怪的行为是否有任何解决方案。我无法解释它...... 这是JSON:

{"2":"[{\"id\":\"3\",\"value\":\"1.15\",\"name\":\"Knobi\"}, Dressing]","1":"[{\"id\":\"1\",\"value\":\"0.00\",\"name\":\"Scharf\"}, Soße, {\"id\":\"2\",\"value\":\"1.00\",\"name\":\"Tzatziki\"}, Soße]"}

if(addonsJSON != null)
{
    Iterator<String> iterator = addonsJSON.keys();
    while (iterator.hasNext())
    {
        String theKey = iterator.next();
        System.out.println(addonsJSON.get(theKey));
        JSONArray values = addonsJSON.getJSONArray(theKey);
        for (int j = 0; j < values.length(); j+=2)
        {
            JSONObject vals = new JSONObject(values.getString(j));

            CartChild cartChild = new CartChild();
            cartChild.name = vals.getString("name");
            cartChild.price = vals.getString("value");
            itemtotal += Float.parseFloat(vals.getString("value"));

            childsList.add(cartChild);
        }
   }
}

2 个答案:

答案 0 :(得分:0)

您的json 不是有效的 json文本。你不能迭代无效的json

像那样修改

{
    "1": [
        {
            "id": "1",
            "value": "0.00",
            "name": "Scharf"
        },
        "Soße",
        {
            "id": "2",
            "value": "1.00",
            "name": "Tzatziki"
        },
        "Soße"
    ],
    "2": [
        {
            "id": "3",
            "value": "1.15",
            "name": "Knobi"
        },
        "Dressing"
    ]
}

http://jsonlint.com/

上比较你的json和我的

答案 1 :(得分:0)

问题是我将HashMap转换为JSONObject。之后我将JSONObject作为字符串保存到SugarORM。转换是错误! 所以我用GSON试了一下。现在它有效。

所以只需使用它:

Gson gson = new Gson();
String json = gson.toJson(hashmap);