【问题标题】:How to parse nested json array in android using volley library如何使用 volley 库在 android 中解析嵌套的 json 数组
【发布时间】:2016-11-26 12:15:58
【问题描述】:

我嵌套了以下格式的 json 数组。我正在使用 volley 库进行 JSON 解析。

{
"City": [{
        "name": "Mumbai",
        "Mumbai": [{
            "area": "andheri",

            "diler": [{
                "DName": "yuvraj"
            }]
        }, {
            "area": "jogeshwari"
        }, {
            "area": "goregaon"
        }]
    },

    {

        "name": "Nashik",
        "Nashik": [{
            "area": "clg rd",
            "diler": [{
                "DName": "yuvraj"
            }]
        }, {
            "area": "GP RD",
            "diler": [{
                "DName": "Roshan"
            }]
        }, {
            "area": "CBS",
            "diler": [{
                "DName": "Deepak"
            }]
        }]

    }, {
        "name": "Bengaluru"
    }
]}

以下是我在android中编写的代码。

   jsonURL = "http://192.168.1.11/cycle_webservices/testing.json";

    buttonReq.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                    jsonURL,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            try {
                                for (int i = 0; i < response.length(); i++) {
                                    JSONObject jsonObject = response.getJSONObject(i);
                                    String name = jsonObject.getString("name");
                                    String area = jsonObject.getString("area");
                                    String diler = jsonObject.getString("diler");

                                    textView.append("\nCity: " + name + "\nArea: " + area + "\nDealer: " + diler +   "\n");
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                                Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("VOLLEY", "ERROR");
                            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
            );
            requestQueue.add(jsonArrayRequest);
        }
    });

但是我在 Android 中解析它时遇到错误。 错误是 - JSONObject 无法转换为 JSONArray

谁能提供解析这个json数组的示例代码。

提前致谢

【问题讨论】:

  • 请添加您迄今为止尝试过的代码来解析响应
  • 好的,让我编辑我的问题
  • 请将您的代码粘贴到这里,只有别人才能理解您的问题,您会得到快速的答复。
  • 我认为您正在将一个对象城市解析为一个城市数组,将城市更改为对象,这样问题就可以解决了。
  • 您的响应是 JsonObject 并且您正在解析 JsonArray 这就是出现此错误的原因。在 JsonArrayRequest @Monali 的 volley 中调用 JsonObjectRequest

标签: android json android-volley


【解决方案1】:

这是您的问题解决方案,请使用以下代码

 try {
        JSONObject jsonObject = new JSONObject("response");
        JSONArray jsonArray = jsonObject.getJSONArray("City");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            String name = object.getString("name");
            if (object.length() != 0) {
                Iterator<String> key = object.keys();
                while (key.hasNext()) {
                    String cityname = key.next();
                    JSONArray ja = object.getJSONArray(cityname);
                    for (int j = 0; j < ja.length(); j++) {
                        JSONObject object1 = ja.getJSONObject(j);
                        String area = object1.getString("area");

                    }
                }
            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

并尝试使您的 JSON 格式相同。

【讨论】:

    【解决方案2】:

    重点是第一个json节点是一个JsonObject, 以这种方式更改您的代码并继续解析:

    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) { 
    

    【讨论】:

      【解决方案3】:

      使用 JSONObject 解析数据,例如:

        JSONObject jsonObject = new JSONObject(response);
      
        JSONArray jsonArray = jsonObject.getJSONArray("City");
      
        for(int i = 0; i<jsonArray.length(); i++)
        {
            JSONObject jsonObject = jsonArray .getJSONObject(i);
      
            String name = jsonObject.getString("name");
      
            JSONArray city_array = jsonObject.getJSONArray(name);
      
            for(int j=0; j<city_array.length(); j++)
            {
                JSONObject obj = city_array.getJSONObject(j);
      
                String area = obj.getString("area");
      
                JSONArray diler_array = obj.getJSONArray("diler");
      
                JSONObject obj1 = diler_array.getJSONObject(0);
      
                String DName = obj1.getString("DName");
            }
        }
      

      请检查已编辑的答案。

      【讨论】:

        【解决方案4】:

        使用 volley 在 android 中的数组中传递数据数组

        public List<HashMap<String,String>> returnJsonforPhp(){
          HashMap<String,String> map = new HashMap<String,String>();
          List<HashMap<String,String>> forjson= new ArrayList<HashMap<String,String>>();
          /*for(int i=0;i<dblist;i++) {
            map.put("name",dblist.getName());
            map.put("email",dblist.getEmail());
            map.put("mobno",dblist.getMobno());
            forjson.add(map);
          }*/
        
          map.put("name","ravi");
          map.put("email","ravi@gmail.com");
          map.put("mobno","9897939595");
          forjson.add(map);
          return forjson;
        }
        

        字符串 OTP_Url = "https://www.yourdomain.com/rest/updateregistration/";

        public String getJson() 抛出 JsonProcessingException {

        List> list = new ArrayList>(); 列表>> 新列表 = 新 ArrayList>>(); newlist.add(list);

            HashMap<String,String> map = new HashMap<String, String>();
            map.put("name","knnkl");
            map.put("email","kjbjbk");
            map.put("password","njnjknk");
        
            list.add(map);
            newlist.add(list);
            String parsedJson = new ObjectMapper().writeValueAsString(newlist);//json conversion
            return parsedJson;
        }
        

        编译 ( [组:'com.fasterxml.jackson.core',名称:'jackson-core',版本:'2.4.1'], [组:'com.fasterxml.jackson.core',名称:'jackson-annotations',版本:'2.4.1'], [组:'com.fasterxml.jackson.core',名称:'jackson-databind',版本:'2.4.1'] )

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多