2013-04-08 251 views
0

我有一個JSONObject,我傳遞給一個方法來處理到ArrayListsJSONObject vs JARRAY獲取數組長度

{ 
    "set0" : 
    { 
     "title" : "Do you win?", 
     "answer" : "1", 
     "imgUrl" : "imag", 
     "id" : "1" 
    }, 
    "set1" : 
    { 
     "title" : "Did you loose?", 
     "answer" : "1", 
     "imgUrl" : "imag", 
     "id" : "2" 
    } 
} 

該方法的結構是這樣的:

questions(JSONObject result){ 

    // initialization 
    for(int i=0;i < result.length();i++){ 
     question_list.add(result.getJSONObject("set"+i).getString("title")); 
     answer_list.add(result.getJSONObject("set"+i).getString("answer")); 
     img_list.add(result.getJSONObject("set"+i).getString("imgUrl")); 
     question_batch.add(result.getJSONObject("set"+i).getInt("id")); 
    } 
    // rest of code 
} 

我平常見到的jsonarray被用於循環條件,而不是把JSONObject本身,當我的JSONObject變大,但在相同的結構,貼以上將result.length()開始產生一個錯誤的結果,這是一個不正確的實現人誰想要遍歷他們的jsonobject?

+1

看起來你的數據應該存儲爲JSONArray,而不是JSONObject,因爲它代表了一個相同類型的多個數據對象的列表,而不僅僅是一個數據對象。 – FoamyGuy 2013-04-08 13:42:05

+0

所以你會建議通過一個JSONArray比對象的方法? – kabuto178 2013-04-08 13:44:49

+1

嘗試使用GSON代替自己的解析。它更快,更容易實現。 – 2013-04-08 13:48:18

回答

0

我不確定您的實現是否「不正確」,但這是我通常通過JSON迭代的方式。

int i = 0; 
boolean continue = true; 
while (continue){ 
    if (result.has("set" + i){ 

    JSONObject set = result.get("set" + i.toString()); 

    if (set.has("title"){ 
     question_list.add(set.getString("title"); 
    } 
    if (set.has("answer"){ 
     answer_list.add(set.getString("answer"); 
    } 
    if (set.has("imgUrl"){ 
     image_list.add(set.getString("imgUrl"); 
    } 
    if (set.has("id"){ 
     question_batch.add(set.getInt("id"); 
    } 

    i++; 

    }else{ 
     continue = false; 
    } 
} 

這樣會更有效一些,因爲每次您想要將數據拉出時都不需要創建新的JSON對象。 另外我會創建一個新類來處理JSON對象,並創建該類型的數組列表,因此您只需爲每次迭代添加一個對象。通過這種方式,您可以確定您的問題/答案/ imageURLs/ID都保存在一起。就像這樣:

JSONObject set = result.get("set" + i.toString()); 

QuestionObject newQuestion = new QuestionObject(); 

if (set.has("title"){ 
    newQuestion.setTitle(result.getString("title"); 
} 
if (set.has("answer"){ 
    newQuestion.setAnswer(result.getString("answer"); 
} 
if (set.has("imgUrl"){ 
    newQuestion.setImageURL(result.getString("imgUrl"); 
} 
if (set.has("id"){ 
    newQuestion.setID(result.getInt("id"); 
} 

questionList.add(newQuestion); 

此外,如果你沒有注意到,你可以直接使用json.getInt()您的「ID」字段,而不是字符串解析整數。

+0

是的,我用我的實際代碼解析INT,只是我在這裏犯的一個錯字,謝謝你指出它雖然 – kabuto178 2013-04-10 04:09:20

0

您可能還想看看傑克遜。這也很簡單,你的代碼可以從使用它中受益。