2013-04-01 39 views
0

不久前,我問了一個類似的問題,但還有其他問題。在Android中讀取多個JSON數組

我有一個有效的JSON陣列:

但是它不讀取task_goalid,因爲它是在JSON陣列的所述第二部分,誤差上來爲「否價值task_goalid」。

任何想法如何引用JSON數組的第二部分?

+0

curlybrace什麼時候結束? for(int y = 0; y Ihsan

+0

它在日誌之後結束。 – user1876202

+0

然後看看MCeleys的答案,它解釋了你的情況... – Ihsan

回答

1

你有一個JSONArrayJSONObject孩子。

第一JSONObject具有以下字段:

  • _id
  • TASK_NAME
  • task_day
  • task_priority
  • TASK_DESCRIPTION
  • task_goal
  • 用戶

第二JSONObject具有以下字段:

  • _id
  • task_goalid
  • 用戶

因爲你的第一個JSONObject不不包含task_goalid場,你贏了」不能從該對象中檢索它。如果該字段是可選的,那麼您可以檢查該字段是否先存在,然後嘗試使用JSONObject.has("task_goalid")獲取該字段,或者使用JSONObject.optString("task_goalid", "No Value")將其作爲可選字符串獲取。

使用JSONObject.has()是更安全的選擇,因爲您可以明確地說出該字段是否存在。使用JSONObject.optString()可讓您更輕鬆地將缺省值分配給缺少的字段。任何一種方法都可以工作,所以這取決於您的需求。

+0

我將使用多個JSONObjects,我該如何特別從第二個JSONObject獲取字段? – user1876202

+0

第二個對象位於索引1.要獲取第一個對象,請使用'jArray.getJSONObject(0)'。要獲得第二個,你可以使用'jArray.getJSONObject(1)'。請注意,這不是做事的最佳方式,因爲您的數組可能並不總是每次都以相同的方式設置。最好是迭代你的數組,並且首先檢查哪個對象有你要查找的字段,並且只能得到具有必需字段的對象。 – MCeley

+0

感謝您提供的詳細和非常明確的幫助!使用(1)爲我提供了目標ID! – user1876202

2

使用JSONObject.has()來檢查JSONObject是否包含密鑰或從JSONObject獲取密鑰的值之前。

例如你的情況:

String strgoalid; 
if(json_data.has("task_goalid")){ 

    //if json_data JSONObject contain task_goalid 
    strgoalid=json_data.getString("task_goalid") 
    } 
    else{ 
    //if json_data JSONObject not contain task_goalid 
    strgoalid="default value here"; 
    }