【问题标题】:Cannot convert JSONArray to JSONObject using Volley无法使用 Volley 将 JSONArray 转换为 JSONObject
【发布时间】:2013-12-14 10:35:23
【问题描述】:

我正在尝试使用 Volley 来使用 Web 服务。这是我的 logcat 输出:

12-14 10:45:41.750: I/Annuaire2error(4005): org.json.JSONException: Value [{"label":[{"pers_nom":"yen","pers_id":"1", "pers_prenom":"ines","pers_email":"yen98.ines@gmail.com","pers_phone":"443456784"},{"pers_nom":"Jamin","pers_id":"2","pers_prenom org.json.JSONArray 类型的 ":"Derkok","pers_email":"jamin.drk23@gmail.com","pers_phone":"2345512398"}]}] 无法转换为 JSONObject

它似乎无法访问我的网络服务的label 的值。如何从JSONArray 转换为JSONObject

这是我的代码:

mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());

JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        Log.i(TAG,response.toString());
        try{
            JSONObject value = response.getJSONObject("label");
            String essai = value.getString("pers_nom");
            /**
             * just for check 
             * */
            Toast.makeText(getActivity(), ""+essai, Toast.LENGTH_SHORT).show();
            Log.d("volley output", essai);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
},new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(getActivity(), "errrrroooor", Toast.LENGTH_LONG).show(); 
        Log.i(TAG+"error",error.getMessage());
    }
});

mRequestQueue.add(jr);

【问题讨论】:

标签: android web-services android-volley android-json


【解决方案1】:

您得到的响应是 JSONArray 而不是 JSONObject

public void onResponse(JSONObject response)// resposne should be JSONArray
// Change it to JSONArray

这个

JSONObject value = response.getJSONObject("label"); // wrong
// label is a json array

你的 json

[ // json array node 
    { // json object node 
        "label": [ // json array label
            {
                "pers_nom": "yen",
                "pers_id": "1",
                "pers_prenom": "ines",
                "pers_email": "yen98.ines@gmail.com",
                "pers_phone": "443456784"
            },
            {
                "pers_nom": "Jamin",
                "pers_id": "2",
                "pers_prenom": " Derkok",
                "pers_email": "jamin.drk23@gmail.com",
                "pers_phone": "2345512398"
            }
        ]
    }
]

应该是这样的

 @Override
 public void onResponse(JSONArray response) {
 Log.i(TAG,response.toString());
 try{
  JSONObject value = response.getJSONObject(0);
  JSONArray jr = value.getJSONArray("label");
  for(int i=0;i<jr.length();i++)
  {
  JSONObject jb = (JSONObject) jr.get(i);
  String pers_nom = jb.getString("pers_nom"); 
  Log.i(".........",pers_nom);
  ...// similarly for id and so on..  
  }
  ...// rest of the code

编辑:

 Response.Listener<JSONArray> listener = new Response.Listener<JSONArray>()
        {

            @Override
            public void onResponse(JSONArray response) {
                // TODO Auto-generated method stub

            }

        };
        Response.ErrorListener errorListener = new Response.ErrorListener()
        {

            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO Auto-generated method stub

            }

        };

并使用

    JsonArrayRequest  jr =new JsonArrayRequest(Request.Method.GET,url, listener, errorListener) ;

编辑 2:

我检查了源代码,如下所示

 public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener) {
            super(Method.GET, url, null, listener, errorListener);

        }

【讨论】:

  • 所以我犯了一个错误。如果我将网络服务格式更改为:[{"pers_id":"1","pers_nom":"yen","pers_prenom":"ines","pers_email":"yen98.ines@gmail.com" ,"pers_phone":"443456784"},{"pers_id":"2","pers_nom":"Jamin","pers_prenom":"Derkok","pers_email":"jamin.drk23@gmail.com"," pers_phone":"2345512398"}] 这意味着没有 JsonArray!但仍然得到同样的错误。我的主要问题是如何访问没有 json 数组标签的网络服务???
  • 它仍然是一个 json 数组响应。然后是 json 对象,然后是 jsons 字符串
  • @YenInes 如果你想像之前检查编辑一样使用 json 数组,我在这里找到了文档@files.evancharlton.com/volley-docs
  • @YenInes 检查edit2。确保在编辑中使用代码并保持 json 原样。也使用编辑前的解析部分,它应该可以正常工作
  • @YenInes 很高兴为您提供帮助。确保你接受答案并投票赞成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多