How to parse nested json array in android using volley library
Asked Answered
F

4

6

I have nested json array in below format.I am using volley liabrary for JSON Parsing.

{
"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"
    }
]}

Below is the code which i have write in 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);
        }
    });

But i am getting Errors while parsing it in Android. The error is- JSONObject can not be converted to JSONArray

Can anyone please provide sample code to parse this json Array.

Thanks in Advance

Flinty answered 26/11, 2016 at 12:15 Comment(6)
please add code what you have tried so far to parse responseFlesher
Ok, let me edit my questionFlinty
Please paste your code here, then only people can understands your problem and you will get fast answer.Cryobiology
I think you are parsing an Object City into an array of City, change the City into object so the problem would be solved.Archipenko
Ok, Let me try.Flinty
your response is JsonObject and you are parsing JsonArray that is why this error is coming. Call JsonObjectRequest in volley instaed of JsonArrayRequest @FlintyCryobiology
E
6

Here is your problem solution, use below code

 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();
    }

And try to make your JSON format same.

Expediential answered 26/11, 2016 at 12:32 Comment(0)
A
3

The point is the first json node is a JsonObject, change your code this way and continue parsing:

new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) { 
Archipenko answered 26/11, 2016 at 12:26 Comment(0)
B
1

Use JSONObject for parsing data like:

  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");
      }
  }

Please check edited answer.

Bethesde answered 26/11, 2016 at 12:28 Comment(0)
C
0

pass data array inside array in android using volley

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","[email protected]");
  map.put("mobno","9897939595");
  forjson.add(map);
  return forjson;
}

String OTP_Url = "https://www.yourdomain.com/rest/updateregistration/";

public String getJson() throws JsonProcessingException {

List> list = new ArrayList>(); List>> newlist = new 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;
}

compile ( [group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.4.1'], [group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.4.1'], [group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.4.1'] )

Changeover answered 26/1, 2018 at 19:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.