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