从JSONObject创建JSONArray

时间:2016-03-29 08:30:40

标签: java json

美好的一天

我在从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。

2 个答案:

答案 0 :(得分:3)

在有问题的行中,使用getJSONArray而不是强制转换为JSONArray:

JSONArray JSONFirewallRules = jsonObject.getJSONArray(jsonStrings.REQUEST_RULES_ALL_RESPONSE); 

但是,异常不是强制转换异常,而是构造函数异常,您尝试从不受支持的项列表构建JSONArray对象,这是另一个JSONArray:)

答案 1 :(得分:1)

jsonObject.getJSONArray(key)在未找到的情况下抛出异常
使用 jsonObject.opt ... 方法。如果在json对象中找不到键,则这些方法只返回n​​ull 使用jsonObject.optJSONArray(key)代替jsonObject.getJSONArray(key)