JSONObject抛出异常

时间:2013-01-23 20:51:01

标签: java android

我有这段代码(注意responseBody真正来自网络服务器。)

public JSONObject getObj(){
    String responseBody = '[{"zip":"56601","city":"Bemidji","state":"MN","county":"Beltrami","dist":"0.14802"},{"zip":"56619","city":"Bemidji","state":"MN","county":"Beltrami","dist":"3.98172"}]';

    JSONObject response = null;

    try{
        response = new JSONObject(responseBody);
    }catch(JSONException ex){
        Logger.getLogger(Http.class.getName()).log(Level.SEVERE, null, ex);
    }
    return response;
}

我不明白为什么JSONObject会抛出异常。是什么让它做到了?

3 个答案:

答案 0 :(得分:4)

这是一个JSONArray,其中包含JSONObject而不是JSONObject。

看到这个链接: http://www.w3schools.com/json/json_syntax.asp

答案 1 :(得分:0)

这应该有效:

public static JSONArray getObj(){
    String responseBody = "[{\"zip\":\"56601\",\"city\":\"Bemidji\",\"state\":\"MN\",\"county\":\"Beltrami\",\"dist\":\"0.14802\"},{\"zip\":\"56619\",\"city\":\"Bemidji\",\"state\":\"MN\",\"county\":\"Beltrami\",\"dist\":\"3.98172\"}]";

    JSONArray response = null;

    try{
        return new JSONArray(responseBody);
    }catch(JSONException ex){
        ex.printStackTrace();
    }
    return response;
}

答案 2 :(得分:0)

你得到一个例外,因为你试图创建一个JSONObject - 它包含在{}中 - 来自[{1}} - 包含在[]中。如果你看看你的repsonse身体,你会看到它被括在方括号[]中并且是一个JSONArray。

要获取单个对象,您需要(1)创建JSONArray; (2)为你想要的值创建一个单独的JSONObject; (3)归还那个对象。例如,要返回responseBody中的第一个值:

JSONArray

从上面的示例中返回的特定JSONObject中获取信息,例如邮政编码,然后您将使用:

try{
JSONArray responseArray = new JSONArray(responseBody);
return responseArray.getJSONObject(0);
} catch (JSONException e) {
    Log.e("JSON", e.toString());
}

迭代数组同样容易。因为JSONObjects是通过它们的索引号从JSONArray中提取的,所以只需使用JSONObject a = getObj(); String zip = a.getString("zip"); 来拉出每个对象。然后,您可以根据需要处理内部字符串。