2013-04-08 257 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

您可能还想看看杰克逊。这也很简单,你的代码可以从使用它中受益。