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