2014-01-19 22 views
0

我解析在應用中的一些JSON和我所遇到的陣列,有時有信息,其內解析jsonarray:嘗試將jsonarray

{ 
    "output": [ 
     { 
      "id": "1521", 
      "name": "Apples", 
     } 
    ] 
} 

,有時無關。 e.g

{ 
    "output": [ 
     [] 
    ] 
} 

我被

JSONArray output = c.getJSONArray("output"); 
int outputLength = output.length(); 

for (int q = 0; q < outputLength; q++) 
{ 
    JSONObject d = outputs.getJSONObject(q); 
    id[q] = d.getInt("id"); 
    name[q] = d.getString("name"); 
} 

解析,但是當它到達空數組崩潰。 我收到以下錯誤,那麼:

01-19 01:08:00.237: W/System.err(17627): org.json.JSONException: Value [] at 0 of type org.json.JSONArray cannot be converted to JSONObject 

它崩潰,因爲它試圖將jsonarray轉換成一個對象,你不能這樣做,所以我試圖讓第一陣列中的輸出搭配:

JSONArray add = output.getJSONArray(0); 

但是也會崩潰,因爲在第一個輸出中它是一個對象而不是數組。 我無法訪問或控制json提要,因此我暫時無法解析結果。

回答

3

The real答案是:「解決任何產生可怕的JSON的問題」。

如果這不是一個選項,你將不得不弄清楚你試圖訪問它之前你有什麼。 JSONArray.optJSONObject()方法可以幫助解決這個問題;它返回null如果指定的索引不包含JSONObject

JSONArray output = c.getJSONArray("output"); 
for (int q = 0; q < outputLength; q++) 
{ 
    JSONObject d = output.optJSONObject(q); 
    if (d != null) 
    { 
     id[q] = d.getInt("id"); 
     name[q] = d.getString("name"); 
    } 
} 
+0

這是完美的謝謝:) – Howli

-1

因爲你解析在封閉JSONArray一切爲JSONObject,所有的項目都必須格式化的方式。對於工作,你的源字符串必須是這樣的:在頂級JSONArray

[ 
{ 
    "output": [ 
     { 
      "id": "1521", 
      "name": "Apples" 
     } 
    ] 
}, 
{ 
    "output": [ 
     [] 
    ] 
} 
] 

現在都成了JSONObject,並且可以進行相應的解析。這些對象的內容是你的業務(空數組是確定的)。檢查給定的JSON字符串是否有效的好資源是this網站。