我有这段代码(注意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会抛出异常。是什么让它做到了?
答案 0 :(得分:4)
这是一个JSONArray,其中包含JSONObject而不是JSONObject。
答案 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");
来拉出每个对象。然后,您可以根据需要处理内部字符串。