android json解析错误 - JSONArray无法转换为JSONObject

时间:2014-08-21 13:55:11

标签: android xml json parsing

我正在将xml内容转换为JSON内容,内容如下

{
    "response":
    {
        "seatlist":
        {
            "seat":
            {
                "balance":85694.6,"num":12
            },
            "seat":
            {
                "balance":85694.6,"num":12
            }
        },
        "userid":"8970ca285d9c4e4d",
        "seatnum":12,
        "session":"online"
    }
}

我可以通过以下方式获取用户ID和seatnum

JSONObject response = json.getJSONObject("response");
            out.setUserid(response.getString("userid"));
            out.setBalance(Double.valueOf(response.getString("balance")));

现在的问题是我需要解析以下内容并需要获得" num"值

"seatlist":
        {
            "seat":
            {
                "balance":85694.6,"num":12
            },
            "seat":
            {
                "balance":85694.6,"num":12
            }
        }

这是我正在使用的代码

JSONObject objList = response.getJSONObject(" seatlist");
        String n = String.valueOf(objList.getJSONObject(" seat"));
        如果(objList.getJSONObject("座位"。)得到("用户id")等于(用户id))         {             String num = String.valueOf(objList.getJSONObject(" seat")。get(" num"));             out.setSeatNum(Integer.valueOf(NUM));         }

如果我有一个席位值,我可以得到" num"值否则我得到JSON异常

请给我一个建议......

2 个答案:

答案 0 :(得分:2)

您希望在JSONObject中获取JSONArray。这是不可能的。 获取数组,然后遍历数组以获取对象:

JSONObject objList = response.getJSONArray("seatlist");
for(int i = 0, i<objList.lenght(); i++){
   JSONObject json = objList.get(i);
}

答案 1 :(得分:1)

{
"response":
{
    "seatlist":
    {
        "seat":
        {
            "balance":85694.6,"num":12
        },
        "seat":
        {
            "balance":85694.6,"num":12
        }
    },
    "userid":"8970ca285d9c4e4d",
    "seatnum":12,
    "session":"online"
}
}

表示具有称为响应的对象的对象。这包含一个名为seatlist的对象。这包含两个名为seat的对象(但这是错误的!这应该是一个数组!)。等等..

阅读本文可以使用

JSONObject json = new JSONObject(yourresponse);
JSONObject response = json.getJSONObject("response");

JSONObject seatlist = response.getJSONObject("seatlist");
JSONObject userid = response.getJSONObject("userid");
JSONObject seatnum = response.getJSONObject("seatnum");
JSONObject session = response.getJSONObject("session");

现在的座位表包含。

   {
    "seat":
    {
        "balance":85694.6,"num":12
    },
    "seat":
    {
        "balance":85694.6,"num":12
    }
}

这是错误的,因为它包含2个具有相同名称的元素。现在你可以通过这样的索引来调用它:

 JSONObject seat1 = seatlist.getJSONObject(1);
 JSONObject seat2 = seatlist.getJSONObject(2);


 seat1.getString("balanace"); seat1.getInt("num");

或者您可以遍历JSONObject。

至少它应该是一个数组而不是JSONOBject。

这意味着它应该是这样的。

{
"response": {
"seatlist": [
    "seat":
    {
        "balance":85694.6,"num":12
    },
    "seat":
    {
        "balance":85694.6,"num":12
    }
],
"userid":"8970ca285d9c4e4d",
"seatnum":12,
"session":"online"
} 
}