美好的一天
我在从JSONObject解析JSONArray时遇到问题。我可能只是误会。
创建要发送的JSONObject:
@media only screen and (max-device-width: 480px) {
div#wrapper {
width: 400px;
}
div#header {
background-image: url(media-queries-phone.jpg);
height: 93px;
position: relative;
}
div#header h1 {
font-size: 140%;
}
#content {
float: none;
width: 100%;
}
#navigation {
float:none;
width: auto;
}
}
这会在json对象中发送一个json数组,以简化操作。这是正确的。
返回的对象采用以下格式:
int i = 0;
JSONArray jsonArray = new JSONArray();
String line;
while ((line = bufferedReader.readLine()) != null) {
JSONObject rule = new JSONObject().put("rule", line);
jsonArray.put(i,rule);
i++;
}
return (new JSONObject().put(jsonStrings.REQUEST_RULES_ALL_RESPONSE, jsonArray));
我想将其解析为List RULES。 读取收到的JSONObject:
{"REQUEST_RULES_ALL_RESPONSE":[
{"rule":"something"},
{"rule":"something"},
{"rule":"something"} ]}
错误:org.json.JSONException:不是原始数组:class org.json.JSONArray
我不明白为什么这是一个问题。我想从对象中获取JSONArray。
答案 0 :(得分:3)
在有问题的行中,使用getJSONArray而不是强制转换为JSONArray:
JSONArray JSONFirewallRules = jsonObject.getJSONArray(jsonStrings.REQUEST_RULES_ALL_RESPONSE);
但是,异常不是强制转换异常,而是构造函数异常,您尝试从不受支持的项列表构建JSONArray对象,这是另一个JSONArray:)
答案 1 :(得分:1)
jsonObject.getJSONArray(key)
在未找到的情况下抛出异常
使用 jsonObject.opt ... 方法。如果在json对象中找不到键,则这些方法只返回null
使用jsonObject.optJSONArray(key)
代替jsonObject.getJSONArray(key)