我执行异步请求(REST query
)。从服务器端获得响应是......
[{"id":2,"name":"Flowers"},{"id":3,"name":"Trees"}]
我需要将响应字符串解析为JSONObject
,然后解析为
ArrayList<Map<String, String>>
在我的下一个获取数据的async
方法中(注释了一些代码):
//async getting data
@Override
public void onSuccessResult(String response) {
String message;
Log.d(Constants.LOG, response);
try {
JSONObject jsonResponse = new JSONObject(response);
/*
JSONArray jsonArray = jsonResponse.getJSONArray("id");
data.clear();
for(int i=0;i<jsonArray.length()-1;i++){
HashMap<String, String> m = new HashMap<String, String>();
JSONArray url = jsonArray.getJSONArray(i);
m.put("name", url.getString(0));
dataPlants.add(m);
//sAdapter.notifyDataSetChanged();
*/
}catch (JSONException e) {
Log.d(Constants.LOG, e.toString());
e.printStackTrace();
}
我得到了下一个exception
:
org.json.JSONException: Value
[{"id":2,"name":"Flowers"},{"id":3,"name":"Trees"}] of type org.json.JSONArray cannot be converted to JSONObject
那么,如何正确地进行response
答案 0 :(得分:2)
问题来自于您尝试从表示JSONArray 的String创建JSONObject的事实 您需要将String解析为JSONArray。
JSONObject jsonResponse = new JSONObject(response);
应该是
JSONArray jsonResponse = new JSONArray(response);
在
jsonResponse = new JSONArray(response);
//data.clear();
for (int i = 0; i < jsonResponse.length(); i++) {
Object obj = jsonResponse.get(i);
if(obj instanceof JSONObject) {
HashMap<String, String> m = new HashMap<>();
JSONObject object = jsonResponse.getJSONObject(i);
m.put(object.getString("id"), object.getString("name"));
dataPlants.add(m);
}
}
//sAdapter.notifyDataSetChanged();
@编辑:此外,我编辑了代码,以便在那里进行对象验证。
老实说,每当使用JSON文件处理时,你应该将它们视为对象并检查它们是JSONObject的实例还是JSONArray的实例,因为两者都有不同的解析机制