2

I am trying to parse the following API data. I just have to use the start time, end time, location and event name inside my app. I have never parse this type of data before. Hitting the API URL and getting a response is working fine, I just need help in parsing.

I have tried these solutions but it didn't work.

  • parsing JSON 2 arrays (embedded) in Android
  • How to Parsing JSON (Two Dimensional) array Object in android?
  • How to parse JsonArray and JSON Object having two keys and values in android?
  • Ask Android parsing JSON multiple arrays.

JSON:

     [
    {
    "end": {
    "endDate": "2018-03-09",
    "endTime": "03:00",
    "_id": "5a901a7d9fee7d156d594b04"
    },
    "location": "Dance Tent",
    "start": {
    "startDate": "2018-03-09",
    "startTime": "02:00",
    "_id": "5a901a7d9fee7d156d594b05"
    },
    "announcementName": "Jumanji Dance Party"
    }
]

Code:

    final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    for (int index = 0; index < response.length(); index++) {


                            try {
                                JSONObject jsonObject = response.getJSONObject(index);
                                String fullName = jsonObject.getString("startTime");
                                String about = jsonObject.getString("announcementName");
                                String artistType = jsonObject.getString("endTime");
                                String link = jsonObject.getString("location");
                                //String avatar = jsonObject.getString("avatar");

                               Annoucement_Day_One artistInfoGetter=new Annoucement_Day_One( fullName,about, artistType, link );
                                annoucementDayOneList.add(artistInfoGetter);
                                wednesdayAdapter.notifyDataSetChanged();

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

                        }}

            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i("ERRROR RES: ", error.toString());
                    myInstance.dismiss();

                }
            });
            requestQueue.add(jsonArrayRequest);
1

4 Answers 4

2

Try this

    try {
        JSONArray jsonArray= new JSONArray(response);

        for (int i=0;i<jsonArray.length();i++){

            JSONObject object=jsonArray.getJSONObject(i);

            String location=object.getString("location");
            String announcementName=object.getString("announcementName");

            JSONObject end=object.getJSONObject("end");

            String endDate=end.getString("endDate");
            String endTime=end.getString("endTime");
            String id=end.getString("_id");


            JSONObject start=object.getJSONObject("start");

            String startDate=start.getString("startDate");
            String startTime=start.getString("startTime");
            String start_id=start.getString("_id");


        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
Sign up to request clarification or add additional context in comments.

Comments

2

Try this ,

for (int index = 0; index < response.length(); index++) {
        try {
            JSONObject jsonObject = response.getJSONObject(index);

            JSONObject startJson = jsonObject.getJSONObject("start");
            String startTime = startJson.getString("startTime");

            JSONObject endJson = jsonObject.getJSONObject("end");
            String endTime = endJson.getString("endTime");

            String announcementName = jsonObject.getString("announcementName");
            String location = jsonObject.getString("location");

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

1 Comment

it is giving me start time and end time but not annoucementName and location
2
ArrayList<Holder1> arrayList = new ArrayList<>();
        try {
            JSONArray jsonArray = new JSONArray(response);
            for(int index = 0 ;index < jsonArray.length() ; index++){
                JSONObject jsonObject1 = jsonArray.getJSONObject(index);
                //make a holder for end, location, start,announcementName
                Holder1 holder = new Holder1();
                holder.setLocation(jsonObject1.optString("location"));
                holder.setAnnouncementName(jsonObject1.optString("announcementName"));
                //------------
                JSONObject jsonObjectEnd =jsonObject1.getJSONObject("end");
                holder.setEndDate(jsonObjectEnd.optString("endDate"));
                holder.setEndTime(jsonObjectEnd.optString("endTime"));
                holder.setEndID(jsonObjectEnd.optString("_id"));
                //--------------
                JSONObject jsonObjectStart =jsonObject1.getJSONObject("start");
                holder.setStartDate(jsonObjectStart.optString("startDate"));
                holder.setStartTime(jsonObjectStart.optString("startTime"));
                holder.setStartID(jsonObjectStart.optString("_id"));
                //--------------
                arrayList.add(holder);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

Accept the answer. If you like the way i have written.

Comments

2

You can use the GSON library by google.

add the dependency in build.gradle.

compile 'com.google.code.gson:gson:2.8.0'

First, you have to create the model class for your JSON response. this will help you to create the model class.

 public class MyPojo
{
    private Start start;

    private String location;

    private String announcementName;

    private End end;

    public Start getStart ()
    {
        return start;
    }


    public String getLocation ()
    {
        return location;
    }


    public String getAnnouncementName ()
    {
        return announcementName;
    }


    public End getEnd ()
    {
        return end;
    }



}

--------------Start.Java------------

 public class Start
    {
        private String startTime;

        private String startDate;

        private String _id;

        public String getStartTime ()
        {
            return startTime;
        }

        public String getStartDate ()
        {
            return startDate;
        }


        public String get_id ()
        {
            return _id;
        }

        }

------------End.Java-------------------

public class End
{
    private String _id;

    private String endDate;

    private String endTime;

    public String get_id ()
    {
        return _id;
    }

    public String getEndDate ()
    {
        return endDate;
    }

    public String getEndTime ()
    {
        return endTime;
    }
}

Now in your onResponse method

       MyPojo respnse = new Gson().fromJson(response.toString(), MyPojo.class);

you can access any method from response.Ex. response.getEnd().getEnd_date()

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.