0

に処理されるメソッドに渡す JSONObject がありますArrayLists

{
    "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
}

通常、jsonobject が大きくなったときに jsonobject 自体ではなく jsonarray がループ条件に使用されていることがわかりますが、上記と同じ構造でresult.length()は間違った結果が得られ始めます。これは反復したい人にとっては間違った実装です彼らのjsonobjectを通して?

4

2 に答える 2

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 オブジェクトを処理する新しいクラスを作成し、その型の配列リストを作成するので、反復ごとに 1 つのオブジェクトを追加するだけで済みます。このようにして、質問/回答/画像 URL/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」フィールドを使用して整数を直接解析できます。

于 2013-04-09T18:48:07.387 に答える
0

ジャクソンも見てみたいかもしれません。これも非常に簡単で、コードを使用することでメリットが得られる可能性があります。

于 2013-04-08T14:29:02.133 に答える