Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to check if a JSONArray is empty in java?

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 ?

like image 356
seriously Avatar asked Mar 02 '15 10:03

seriously


People also ask

How do I check if a JSONArray is empty?

You can use the regular length() method. It returns the size of JSONArray. If the array is empty, it will return 0. So, You can check whether it has elements or not.

How do I check if a JSON object is empty?

return Object.keys(obj).length === 0 ; This is typically the easiest way to determine if an object is empty.

Can JSONArray be null?

The initial size parameter to the JsonArray constructor is defined as follows: An INTEGER variable that represents the size of the new JsonArray. Each element is initialized to the JSON null value. If this value is 0, the array is empty.

Can a JSON array be empty?

JSON data has the concept of null and empty arrays and objects.


2 Answers

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 check the length(), e.g.:

kl = c.getJSONArray("kl"); if(kl != null && kl.length() > 0 ){    klassenID[i] = kl.getJSONObject(0).getString("id"); } 
like image 71
T.Gounelle Avatar answered Sep 29 '22 05:09

T.Gounelle


You can also use isEmpty() method, this is the method we use to check whether the list is empty or not. This method returns a Boolean value. It returns true if the list is empty otherwise it gives false. For example:

if (!k1.isEmpty()) {     klassenID[i] = kl.getJSONObject(0).getString("id");      } 
like image 30
Syyam Noor Avatar answered Sep 29 '22 03:09

Syyam Noor