Android JSON:在数组中解析数组

Android JSON:在数组中解析数组,android,arrays,json,jsonobject,Android,Arrays,Json,Jsonobject,我正在尝试解析此JSON输出: { "answers": [ { "table_data": [ [ { "column_id": 49, "value": "1957" } ],

我正在尝试解析此JSON输出:

{
    "answers": [
        {
            "table_data": [
                [
                    {
                        "column_id": 49,
                        "value": "1957"
                    }
                ],
                [
                    {
                        "column_id": 49,
                        "value": "1836"
                    }
                ]
            ]
        },
        {
            "table_data": {
                "0": [
                    {
                        "column_id": 61,
                        "value": "1091"
                    },
                    {
                        "column_id": 62,
                        "value": "2046"
                    }
                ],
                "1": [
                    {
                        "column_id": 61,
                        "value": "467"
                    },
                    {
                        "column_id": 62,
                        "value": "1429"
                    }
                ],
                "2": [
                    {
                        "column_id": 61,
                        "value": "1236"
                    },
                    {
                        "column_id": 62,
                        "value": "2202"
                    }
                ]
            }
        }
    ]
}
使用此代码:

groups = json.getJSONArray(TAG_ANSWERS);
for (int i = 0; i < groups.length(); i++) {
    JSONObject c = groups.getJSONObject(i);
    ansTable = c.getString(TAG_ANSWER_TABLE);
    System.out.println("TABLE: " + ansTable);

    //test if there is "0" or an array

    JSONArray arr = c.getJSONArray(TAG_ANSWER_TABLE); ****ERROR HERE****
    System.out.println("ARRAY: " + String.valueOf(arr));

    for (int j = 0; j <arr.length();j++){
        JSONArray child = arr.getJSONArray(j);
        JSONObject d = child.getJSONObject(0);
        String col = d.getString(TAG_ANSWER_TABLE_COLID);
        String val = d.getString(TAG_ANSWER_TABLE_VALUE);
        System.out.println("DATA: " + col +": "+val);
        System.out.println("CHILD: " + String.valueOf(child));
        System.out.println("INNER: " + String.valueOf(d));
    }
groups=json.getJSONArray(TAG\u-ANSWERS);
对于(int i=0;i对于(int j=0;j而言,数据结构不一致,下面的第二部分不是数组而是对象,而是第一部分
表_数据
是数组

       "table_data": {
            "0": [
                {
                    "column_id": 61,
                    "value": "1091"
                },
                {
                    "column_id": 62,
                    "value": "2046"
                }
            ],
            "1": [
                {
                    "column_id": 61,
                    "value": "467"
                },
                {
                    "column_id": 62,
                    "value": "1429"
                }
            ],
            "2": [
                {
                    "column_id": 61,
                    "value": "1236"
                },
                {
                    "column_id": 62,
                    "value": "2202"
                }
            ]
        }
编辑:

JSONArray arr = c.optJSONArray(TAG_ANSWER_TABLE);
if (arr!=null) {
   //parse as array
} else {
    //you may use c.getJSONObject(TAG_ANSWER_TABLE); as well, if it MUST be either array or object
    JSONObject obj = c.optJSONObject(TAG_ANSWER_TABLE); 
   //parse as obj

}

数据结构不一致,下面的第二部分不是数组而是对象,但第一部分是数组

       "table_data": {
            "0": [
                {
                    "column_id": 61,
                    "value": "1091"
                },
                {
                    "column_id": 62,
                    "value": "2046"
                }
            ],
            "1": [
                {
                    "column_id": 61,
                    "value": "467"
                },
                {
                    "column_id": 62,
                    "value": "1429"
                }
            ],
            "2": [
                {
                    "column_id": 61,
                    "value": "1236"
                },
                {
                    "column_id": 62,
                    "value": "2202"
                }
            ]
        }
编辑:

JSONArray arr = c.optJSONArray(TAG_ANSWER_TABLE);
if (arr!=null) {
   //parse as array
} else {
    //you may use c.getJSONObject(TAG_ANSWER_TABLE); as well, if it MUST be either array or object
    JSONObject obj = c.optJSONObject(TAG_ANSWER_TABLE); 
   //parse as obj

}
上面的JSON格式不正确, 1.检查“应答”对象索引(0)“表_数据”是JSONArray,但在索引(1)上,“表_数据”是JSONObject。 2.当“table_data”为数组时,它不包含键,但当“table_data”为对象时,它包含像“0”、“1”、“2”等键

结论 您无法解析它,因为它不一致

上面的JSON格式不正确, 1.检查“应答”对象索引(0)“表_数据”是JSONArray,但在索引(1)上,“表_数据”是JSONObject。 2.当“table_data”为数组时,它不包含键,但当“table_data”为对象时,它包含像“0”、“1”、“2”等键

结论
您无法解析它,因为它不一致…!

查看是否有帮助确定是否有任何方法可以解析这两者?或者我需要两者都是数组/对象吗?
JSONArray arr=c.optJSONArray(TAG\u ANSWER\u TABLE)
您应该使用此选项,然后检查
arr
是否为空,如果为空,则检查
JSONObject obj=c.optJSONObject(标记\u答案\u表)
获取并将其解析为object这很有帮助。几分钟前我发现,在这种情况下,
opt
更好,因为如果对象不存在,它将返回
null
。是的。我已经更新了我的答案,将其包括在内。是否有任何方法可以解析这两个对象?或者我需要两者都是数组/对象?
JSONArray-arr=c.optJSONArray(TAG_ANSWER_TABLE);
您应该使用此选项,然后检查
arr
是否为null,如果为null,则检查
JSONObject obj=c.optJSONObject(TAG_ANSWER_TABLE)
获取并将其解析为object这很有帮助。几分钟前我发现在这种情况下,
opt
更好,因为如果对象不存在,它会返回
null
。是的。我已经更新了我的答案,将其包括在内。它仍然是可解析的。否?我不能:
JSONObject obj=c.optJSONObject(TAG\u answer\u TABLE);如果(obj==null){//parse array}else{//parse object}
它仍然是可解析的吗?我不能只:
JSONObject obj=c.optJSONObject(TAG\u ANSWER\u TABLE);if(obj==null){//parse array}else{//parse object}