2

我有这部分代码(请注意,它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 会抛出异常。是什么让它这样做?

4

3 回答 3

3

这是一个带有 JSONObject 的 JSONArray,而不是 JSONObject。

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

于 2013-01-23T21:01:32.143 回答
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;
}
于 2013-01-23T21:00:20.980 回答
0

你得到一个例外,因为你试图创建一个JSONObject- 它包含在 {} 中 - 从JSONArray包含在 [] 中的东西中创建一个 - 。如果您查看您的响应主体,您会看到它包含在方括号 [] 中,并且是一个 JSONArray。

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

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

要从上述示例中返回的特定 JSONObject 中获取信息,例如邮政编码,您可以使用:

JSONObject a = getObj(); 
String zip = a.getString("zip");

遍历数组同样简单。因为 JSONObjects 是通过它们的索引号从 JSONArray 中提取出来的,所以只需使用 afor loop将每个对象拉出来。然后,您可以根据需要处理内部字符串。

于 2013-01-23T21:09:56.813 回答