Comment vérifier si un JSONArray est vide en java?

je travaille sur une application android qui reçoit le contenu json d'un service Web appelé "WebUntis". Le contenu Json que je suis se ressemble:

{"jsonrpc":"2.0","id":"req-002",
 "result":[
    {"id":125043,"date":20110117,"startTime":800,"endTime":850,
     "kl":[{"id":71}],
     "te":[{"id":23}],
     "su":[{"id":13}],
     "ro":[{"id":1}]},
    {"id":125127,"date":20110117,"startTime":1055,"endTime":1145,
     "kl":[{"id":71}],
     "te":[{"id":41}],
     "su":[{"id":19}],
     "ro":[{"id":31}]},
...]}

Comme vous pouvez le voir dans le résultat-tableau il y a aussi d'autres tableaux comme "kl", "su" et "ro"

j'obtiens le contenu de ces tableau et puis je stocker dans une arraylist. Mais quand un de ces tableaux est vide, comme;

    {"jsonrpc":"2.0","id":"req-002",
     "result":[
         {"id":125043,"date":20110117,"startTime":800,"endTime":850,
          "**kl":[]**,
          "te":[{"id":23}],
          "su":[{"id":13}],
          "ro":[{"id":1}]},
         {"id":125127,"date":20110117,"startTime":1055,"endTime":1145,
          "kl":[{"id":71}],
          "te":[{"id":41}],
          "su":[{"id":19}],
          "ro":[{"id":31}]},
...]}

je suis toujours à l'obtention de l'erreur IndexOutOfRangeException, mais je suis toujours dire qu'il ne faut pas prendre les tableaux vides, c'est ce que j'ai essayé:

 JSONObject jsonResult = new JSONObject(s);
 // Get the result object
 JSONArray arr = jsonResult.getJSONArray("result");

 for (int i = 0; i < arr.length(); i++) {
    JSONObject c = arr.getJSONObject(i);
    anfangStunde[i] = c.getString("startTime");
    endeStunde[i] = c.getString("endTime");

    // get the jsonarrays (kl, su, ro)
    kl = c.getJSONArray("kl");
    su = c.getJSONArray("su");
    ro = c.getJSONArray("ro");

    // check if kl is not null
    if(kl != null){
       klassenID[i] = kl.getJSONObject(0).getString("id");
    }
    if (klassenID[i] != null) {
       klasse = webuntis.klassenMap.get(klassenID[i]);
       Log.d("ID und Klasse=", "" + klassenID[i] + ";" + klasse);
    }
    // get th ids
    fachID[i] = su.getJSONObject(0).getString("id");
    if (fachID[i] != null) {
       fach = webuntis.faecherMap.get(fachID[i]);
       Log.d("ID und Fach=", "" + fachID[i] + ";" + fach);
    }

    // "Start;Ende;Klasse;Fach;Raum" store in arraylist
    webuntis.stundenPlan.add(anfangStunde[i] + ";" + endeStunde[i] + ";" + klasse + ";" + fach);
    // Write Data into a file for offline use:
 }

quelqu'un Peut-il m'aider ?

16
demandé sur T.Gounelle 2015-03-02 13:49:56

2 réponses

Si le tableau est définie dans le fichier mais est vide, comme:

...
"kl":[]
...

getJSONArray("kl") retour vide array, mais l'objet n'est pas null. Alors, si vous faites cela:

kl = c.getJSONArray("kl");
if(kl != null){
   klassenID[i] = kl.getJSONObject(0).getString("id");
}

kl null kl.getJSONObject(0) lèvera une exception, il n'est pas premier élément dans le tableau.

a la place vous pouvez tester le length(), e.g.:

kl = c.getJSONArray("kl");
if(kl != null && kl.length() > 0 ){
   klassenID[i] = kl.getJSONObject(0).getString("id");
}
29
répondu T.Gounelle 2016-08-18 09:54:39

Vous pouvez également utiliser isEmpty() méthode, c'est la méthode que nous utilisons pour vérifier si la liste est vide ou pas. Cette méthode renvoie une valeur Booléenne. Il retourne true si la liste est vide sinon il donne false. Par exemple:

if (!k1.isEmpty()) {
    klassenID[i] = kl.getJSONObject(0).getString("id");     
}
0
répondu abbu jan 2018-08-30 07:23:06