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

6
  • please add code what you have tried so far to parse response Commented Nov 26, 2016 at 12:17
  • Ok, let me edit my question Commented Nov 26, 2016 at 12:19
  • Please paste your code here, then only people can understands your problem and you will get fast answer. Commented Nov 26, 2016 at 12:19
  • I think you are parsing an Object City into an array of City, change the City into object so the problem would be solved. Commented Nov 26, 2016 at 12:22
  • 1
    your response is JsonObject and you are parsing JsonArray that is why this error is coming. Call JsonObjectRequest in volley instaed of JsonArrayRequest @Monali Commented Nov 26, 2016 at 12:24

4 Answers 4

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.

Sign up to request clarification or add additional context in comments.

Comments

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) { 

Comments

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.

Comments

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'] )

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.