JSONArray无法在java中转换为JSONObject

时间:2014-04-17 13:33:03

标签: java android json

我想从这个来自这个JSON文件的字符串中获取一个json对象:

{
"categories": {
    "category": [
        {
            "label": "Collaboration",
            "thumbnail": "http://mywebite.com/dfsv",
            "description": "...",
            "contents": {
                "@attributes": {
                    "count": "79"
                }
            },
            "@attributes": {
                "id": "ZSQYN2"
            }
        },
        {
            "label": "Communication",
            "thumbnail": "http://mywebite.com/dfsv",
            "description": "...",
            "contents": {
                "@attributes": {
                    "count": "43"
                }
            },
            "@attributes": {
                "id": "uGQ9MC"
            }
        }
    ],
    "@attributes": {
        "page": "12",
        "limit": "0",
        "count": "111",
        "lang": "en"
    }
}

}

我正在使用此代码:

JSONObject obj = new JSONObject(myString);

我收到此错误消息:

  

类型org.json.JSONArray的值...无法转换为JSONObject

如果我这样做:

JSONArray obj = new JSONArray(myString);

我收到此错误消息:

  

类型org.json.JSONObject的值...无法转换为JSONArray

...

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

JSONArrayJSONObject是两个不同的东西,不应该彼此类型兼容,所以这些错误是有意义的。这是一个JSONArray:

["foo", "bar", "baz"]

这是一个JSONObject:

{ "foo" : "bar", "baz" : "quux" }

您可能正在寻找JSONElement,其中像Google's GSON这样的API是数组和对象之间的通用超类。

在Android JSON API下,它们也不兼容。

答案 1 :(得分:1)

我终于找到了解决方案!

我替换了

JSONObject obj = new JSONObject(myString);

by:

JSONObject obj = new JSONObject(myString.substring(myString.indexOf("{"), myString.lastIndexOf("}") + 1));

找到答案here

希望它会帮助别人!