2012-04-08 57 views
8

Tôi đang kiểm tra nếu một đối tượng trong một chuỗi JSON tồn tại sử dụng này:Kiểm tra nếu tồn tại subobject trong 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"); 

Vấn đề xuất hiện khi tôi cố gắng để kiểm tra xem một đối tượng phụ tồn tại. ví dụ:

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

Queue luôn tồn tại và xây dựng cũng có, nhưng q0 không phải lúc nào cũng có. Vì vậy, làm thế nào tôi có thể kiểm tra sự tồn tại của q0? Và, có cách nào để kiểm tra nó bằng thư viện Gson không?

Cảm ơn bạn trước!

Trả lời

11

Bạn có thể chỉ cần thử và trả về giá trị rỗng nếu thử không thành công. Hoặc bạn có thể phá vỡ nỗ lực của bạn thành từng miếng nhỏ để theo dõi vị trí không thành công.

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

Bạn cũng có thể thực hiện từng bước, nếu bạn muốn in nhật ký cho từng cấp;

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

Cảm ơn bạn rất nhiều! –

+1

@KrLx_roller - vui vì nó đã giúp! –

1

Sử dụng các ngoại lệ đối với lợi thế của bạn

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 - nếu phím không tìm thấy hoặc nếu giá trị không phải là một JSONObject.

+0

nó không hoạt động ... Nó luôn ném: 'không có giá trị cho q0' –

+0

Có vẻ như q0 là JSONObject chứ không phải int. –

+0

@PeterAjtai Vâng, đó là một JSONObject mà tôi muốn kiểm tra sự tồn tại của nó –

Các vấn đề liên quan