how to check if a JSONArray is empty in java?

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I am working on an android app that get json content of a webservice called "WebUntis". The Json content i am getting looks like:

{"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}]}, ...]} 

As you can see in the result-array there are also other arrays like "kl", "su" and "ro"

I am getting the content of these array and then i store them in an arraylist. But when one of these array is empty, like;

    {"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}]}, ...]} 

I am always getting the error IndexOutOfRangeException, but I am always telling it that it should not take the empty arrays, this is what I have tried:

 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:  } 

Can anyone help me ?

回答1:

If the array is defined in the file but is empty, like:

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

Then getJSONArray("kl") will return an empty array, but the object is not null. Then, if you do this:

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

kl is not null and kl.getJSONObject(0) will throw an exception - there is no first element in the array.

Instead you can test the length(), e.g.:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!