0

JSON 応答を解析するために gson を使用しています。コードは、適切な JSON 応答に対して正常に機能します。ただし、JSON 応答が空の配列の場合、私のコードは「begin_object を期待していましたが、end_array を取得しました」と不平を言い続けます。

JSON response
    {
        "list" : {
                  "data" : [

                  ]
         }
    }

私のコード

try {
    jsonReader.beginArray();
        do{
        jsonReader.beginObject();
            while(jsonReader.hasNext()){
                      // Parse all data
              jsonReader.endObject();
            } while(jsonReader.hasNext());
            jsonReader.endArray();
} catch (IOException e) {
//Exception
}

上記の例外が何を意味するかはわかっています。単に、配列内のオブジェクトが処理されることを期待していたことを意味します。ただし、空の配列であるため、例外が発生します。

しかし、私はAPIガイドを見てきましたが、JSONが空の配列であるか、入力ストリームの次のオブジェクトがオブジェクトまたは配列の終わりなどであるかを確認する方法はありません.

そのようなメソッドがGSON APIに存在することを教えてください。または、この問題をどのように克服できますか?

編集:サーバーからの応答を変更しました。

4

1 に答える 1

1

あなたはすでに適切な方法を使用しています。JsonReader クラスのドキュメントJsonReader.hasNext()で説明されているメソッドです。

配列処理メソッド内で、最初に beginArray() を呼び出して、配列の開き括弧を消費します。次に、値を累積する while ループを作成し、hasNext() が false のときに終了します。最後に、endArray() を呼び出して、配列の閉じ括弧を読み取ります。

do/while ループから while ループに切り替えるだけです。現在のコードでは、do/while はループの最後まで条件をチェックしないため、配列内に少なくとも 1 つのオブジェクトが常に存在する必要があります。

于 2013-04-15T04:51:36.097 に答える