2012-04-08 20 views
8

mi sprawdzenie, czy obiekt w ciąg JSON istnieje pomocą tego:Sprawdzenie czy istnieje podobiektu w JSON

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

Problem pojawia się, gdy próbuję sprawdzić, czy obiekt sub istnieje. np:

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

Kolejka zawsze istnieje i budowy również, ale q0 nie jest zawsze. Jak więc sprawdzić istnienie q0? Czy istnieje sposób, aby to sprawdzić za pomocą biblioteki Gson?

Z góry dziękuję!

Odpowiedz

11

Możesz po prostu spróbować i zwrócić wartość null, jeśli próba nie powiodła się. Lub możesz podzielić próbę na małe kawałki, aby monitorować, gdzie się nie udaje.

/** 
* 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; 
    }  
} 

Możesz także przejść krok po kroku, jeśli chcesz wydrukować dzienniki dla każdego poziomu;

/** 
* 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; 
} 
+2

Dziękuję bardzo! –

+1

@KrLx_roller - cieszę się, że pomogło! –

1

pomocą wyjątków na swoją korzyść

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 - jeśli klucz nie zostanie znaleziony lub jeśli wartość nie jest JSONObject.

+0

nie działa ... To zawsze rzucać: 'no value for q0' –

+0

Wygląda q0 jest JSONObject i nie int. –

+0

@PeterAjtai Tak, jest to JSONObject, który chcę sprawdzić jego istnienie –

Powiązane problemy