2011-09-02 64 views
19

如何檢查元素是否是JSONArray或JSONObject。我寫的代碼檢查,JSON Java檢查元素是JSONArray或JSONObject

if(jsonObject.getJSONObject("Category").getClass().isArray()) { 

} else { 

} 

在這種情況下,如果元素「類別」是的JSONObject那麼它工作得很好,但如果它包含一個數組,那麼它拋出異常:JSONArray不能被轉換爲JSONObject的。請幫忙。 謝謝。

+0

http://stackoverflow.com/a/13100642/1318946檢查它....可能對你有幫助.. –

回答

25

是的,這是因爲getJSONObject("category")會嘗試將String轉換爲JSONObject什麼會拋出JSONException。你應該做到以下幾點:

檢查對象是一個JSONObject使用:

JSONObject category=jsonObject.optJSONObject("Category"); 

將返回一個JSONObjectnull如果category對象不是一個JSON對象。 然後你做到以下幾點:

JSONArray categories; 
    if(category == null) 
     categories=jsonObject.optJSONArray("Category"); 

將返回你JSONArray或空,如果它不是一個有效的JSONArray

+0

偉大的奧維迪烏。謝謝。 – Neetesh

+0

不客氣! –

+0

沒有我能想到的... –

0

您可以使用instanceof來檢查您得到的結果的類型。然後你可以隨心所欲地處理它。

0
  if (element instanceof JSONObject) { 

       Map<String, Object> map = json2Java.getMap(element 
         .toString()); 
       if (logger.isDebugEnabled()) { 
        logger.debug("Key=" + key + " JSONObject, Values=" 
          + element); 
       } 
       for (Entry<String, Object> entry : map.entrySet()) { 
        if (logger.isDebugEnabled()) { 
         logger.debug(entry.getKey() + "/" 
           + entry.getValue()); 
        } 
        jsonMap.put(entry.getKey(), entry.getValue()); 
       } 
      } 
16

即使你有你的答案,但它仍然可以幫助其他用戶...

if (Law.get("LawSet") instanceof JSONObject) 
{ 
    JSONObject Lawset = Law.getJSONObject("LawSet");       
} 
else if (Law.get("LawSet") instanceof JSONArray) 
{ 
    JSONArray Lawset = Law.getJSONArray("LawSet"); 
} 

這裏Law是其他JSONObjectLawSet是你想要找到的關鍵JSONObject or JSONArray

+0

非常感謝我應該驗證對象和數組之間..所以得到了解決方案!!!!! :) –

+0

哇...保存我的一天...謝謝@Vikas。 –

相關問題