如何对JSON进行休息响应

时间:2016-08-10 14:59:16

标签: java android json

我执行异步请求(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

1 个答案:

答案 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的实例,因为两者都有不同的解析机制