2011-08-18 96 views
6

我的JSONObject的代碼片段的結果,但是,有時候,我值不開始1,我有這樣的一個錯誤:測試是否getJSONArray爲空或不是

org.json.JSONException: No value for 1 

我的代碼:

JSONObject obj = new JSONObject(result); 
     for(int i=1;i<=14;i++) { 

      JSONArray arr = obj.getJSONArray(""+i); 
     extraction(arr, i); 
     } 

如果對象代碼(i)存在與否,我想在提取之前測試。我怎麼能做到這一點?

+0

我可能是錯的,但它不應該是從零開始的索引? –

回答

12

使用obj.optJSONArray(name)如果名稱不存在,則響應將爲空。

JSONObject obj = new JSONObject(result); 
    for(int i=1;i<=14;i++) { 

     JSONArray arr = obj.optJSONArray(""+i); 
     if(arr != null) { 
       extraction(arr, i); 
     } 
    } 
+0

這行:JSONArray arr = obj.optJSONArray(「」+ i); 對錯誤負責,並停止代碼。它永遠不會到達「如果」。我如何測試它是否爲空? – toshiro92

+4

您需要了解getJSONArray和optJSONArray之間的區別。如果鍵不存在,第一個崩潰,第二個返回null,您可以測試。 – njzk2

+0

@ njzk2是對的 – Kevin

3

使用JSONObject.optJSONArray(key).

如文檔中所指出的,它返回的情況下,空的鍵不存在。

另外,你的JSON結構看起來很奇怪。爲什麼你在對象中有數字有序鍵?不應該是一個數組?

+0

我的代碼的特殊性,我需要一個int來檢索數據庫中的數據 – toshiro92

0

您不能使用.length()來檢查JSONArray的返回null。 使用.isNull( 「XXX」)來代替。長度(),示例低於:

JSONArray magazineLove = null; 
if(!socialBook.getJSONObject(i).isNull("MagazineLove")) 
{ 
    magazineLove = socialBook.getJSONObject(i).getJSONArray("MagazineLove");     
} 

Aey.Sakon