Tengo este tipo de datos json que regresan de la URL como se muestra en Imagen1 Image2 Imagen3 Básicamente hay fechas dentro de los datos y luego dentro de estas fechas hay otras 5 cosas diferentes, es decir, session_from, session_to, rate, bookingFound y promoción. Lo que quiero es que quiero almacenar todos estos datos de fechas en una lista de arrays separada.

Por ejemplo:

sessionfrom0 contiene datos para 09-09-2018 y todos sus objetos

sesión de 1 contiene datos para 10-09-2018 y todos sus objetos

La sesión del 2 contiene datos para el 11-09-2018 y todos sus objetos

He intentado con el siguiente fragmento de código pero no funciona correctamente

JSONObject jsonObject = new JSONObject(response);
JSONObject dataObj = jsonObject.getJSONObject("data");
Iterator<String> iter = dataObj.keys();

    sessionsfrom0 = new ArrayList<String>();
    sessionsfrom1 = new ArrayList<String>();
    sessionsfrom2 = new ArrayList<String>();
        while (iter.hasNext()) {
            key = iter.next();
            JSONArray datesArray = dataObj.getJSONArray(key);

            for (int i = 0; i < datesArray.length(); i++) {
                 JSONObject datesObject0 = datesArray.getJSONObject(i);
                 JSONObject datesObject1 = datesArray.getJSONObject(i);
                 JSONObject datesObject2 = datesArray.getJSONObject(i);

                 sessionsfrom0.add(datesObject0.getString("session_from") + " - " +datesObject0.getString("session_to");
                 sessionsfrom1.add(datesObject1.getString("session_from") + " - " +datesObject1.getString("session_to");
                 sessionsfrom2.add(datesObject2.getString("session_from") + " - " +datesObject2.getString("session_to");
                  } }

Este código no funciona correctamente, ya que puede ver que la fecha 09-09-2018 contiene una matriz adicional de tamaño 4 y en esa matriz hay otros 5 elementos dentro de cada objeto jjson, por lo que quiero almacenar todo esto en la primera lista de matrices, es decir, sessionfrom0 y luego vaya a la próxima fecha y elija todas sus matrices y objetos json y almacene datos en sessionfrom1 arraylist y así sucesivamente.

0
Aarks 9 sep. 2018 a las 17:36

3 respuestas

La mejor respuesta

Prueba esto:

JSONObject jsonObject = new JSONObject(response);
JSONObject dataObj = jsonObject.getJSONObject("data");
Iterator<String> iter = dataObj.keys();

sessionsfrom0 = new ArrayList<String>();
sessionsfrom1 = new ArrayList<String>();
sessionsfrom2 = new ArrayList<String>();
    while (iter.hasNext()) {
        String key = iter.next();
        JSONArray datesArray = dataObj.getJSONArray(key);

        switch (key) {
           case "2018-09-09":
              fillSessions(datesArray, sessionsfrom0);
              break;

           case "2018-10-09":
              fillSessions(datesArray, sessionsfrom1);
              break;
           ....so on....
        }
    }

Puede crear una función en lugar de reescribir la lógica de bucle for en cada caso:

void fillSessions(JSONArray jsonArray, List<String> sessionList) {
   for (int i = 0; i < jsonArray.length(); i++) {
      JSONObject datesObject = jsonArray.getJSONObject(i);

      sessionList.add(datesObject.getString("session_from") + " - " +datesObject0.getString("session_to");
   }
}
1
Tenten Ponce 9 sep. 2018 a las 14:48

Prueba esto:

JSONObject jsonObject = new JSONObject(response);
JSONObject dataObj = jsonObject.getJSONObject("data");
Iterator<String> iter = dataObj.keys();

Map<String, ArrayList<String>> map = new TreeMap<>();
while (iter.hasNext()) {
    String key = iter.next();
    JSONArray datesArray = dataObj.getJSONArray(key);
    ArrayList<String> tmp = new ArrayList<>();
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject datesObject = jsonArray.getJSONObject(i);
        tmp.add(datesObject.getString("session_from") + " - "+datesObject.getString("session_to"));
    }
    map.put(key, tmp);
}

Probablemente no tenga todas las claves dentro de los datos, por lo que el uso de mayúsculas y minúsculas no es sensible.

1
Mersad Esalati 9 sep. 2018 a las 15:12

Puedes hacer esto usando HashMap

JSONObject jsonObject = new JSONObject(response);
    JSONObject dataObj = jsonObject.getJSONObject("data");
    Iterator<String> iter = dataObj.keys();

    HashMap<String, ArrayList<String>> map = new HashMap<>();

    while (iter.hasNext()) {
        key = iter.next();

        JSONArray datesArray = dataObj.getJSONArray(key);
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < datesArray.length(); i++) {
            JSONObject datesObject0 = datesArray.getJSONObject(i);

            list.add(datesObject0.getString("session_from") + " - " + datesObject0.getString("session_to");
        }
        map.put(key, list);
        }
1
prashant17 9 sep. 2018 a las 15:05