8

I'm checking if an object in a JSON string exists using this:

JSONObject json = null; try { json = new JSONObject(myJsonString); } catch (JSONException e) { e.printStackTrace(); } if(json.has("myObject")) System.out.println("EXISTS"); else System.out.println("DOESN'T EXIST"); 

The problem appears when I attempt to check if a sub object exists. e.g:

...,"queue":{"building":{"q0":{"id":177779,... 

Queue always exists and building also, but q0 is not always there. So, how can I check the existence of q0? And, is there a way to check it using the Gson library?

Thank you in advance!

2 Answers 2

11

You can simply give it a try and return null if the try failed. Or you can break your attempt up into little pieces to monitor where it fails.

/** * This method will return the JSONObject q0, if it exists * If it doesn't exist it will return NULL * */ private JSONObject getQZero(JSONObject json) { try { return json.getJSONObject("queue").getJSONObject("building").getJSONObject("q0"); } catch (JSONException e) { // This could be triggered either because there is no q0 // or because the JSON structure is different from what was expected. return null; } } 

You could also go step by step, if you want to print logs for each level;

/** * This method will show where your jsonparsing fails. * It will throw a JSONOException if the json is way different from what * was expected, and otherwise it will print a log of where the parsing * failed. */ private JSONObject getQZero(JSONObject json) throws JSONException { // Stop if no queue if (! myObject.has("queue") { Log.d(TAG, "no queue!"); return null; } JSONObject queue = myObject.getJSONObject("queue"); // Stop if no building if (! queue.has("building") { Log.d(TAG, "no building!"); return null; } JSONObject building = queue.getJSONObject("building") // Stop if no q0 if (! building.has("q0")) { Log.d(TAG, "no q0!"); return null; } JSONObject q0 = building.getJSONObject("q0"); // Q0 is returned here. If the method returned earlier, it returned NULL // You could also do nested ifs, but the indentation gets crazy return q0; } 
Sign up to request clarification or add additional context in comments.

Comments

1

Use the exceptions to your advantage

 try { JSONObject i = json. getJSONObject("q0"); // Is there do something } catch (JSONException e) { // Isn't there } 

http://www.json.org/javadoc/org/json/JSONObject.html#getJSONObject(java.lang.String)

JSONException - if the key is not found or if the value is not a JSONObject.

3 Comments

Looks like q0 is a JSONObject and not an int.
@PeterAjtai Yes, it is a JSONObject that I want to check its existence
@KrLx_roller - if (building.has("q0"))... - see the second part of my answer

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.