2

Android で GSON を使用して Rotten Tomatoes API からの JSON データを解析しようとしています。一部を解析できますが、基本結果オブジェクト内の配列に問題があるようです。

これが私の「MovieObject」クラスです:

package ---;

import com.google.gson.annotations.SerializedName;

import java.util.List;

public class MovieObject {

public List<Rating> ratings; //You are a problem

    @SerializedName("id")
    public String id;

    @SerializedName("title")
    public String title;

    @SerializedName("year")
    public int year;

    @SerializedName("mpaa_rating")
    public String mpaaRating;

    @SerializedName("runtime")
    public int runtime;

    @SerializedName("critics_consensus")
    public String criticsConsensu;

    @SerializedName("synopsis")
    public String synopsis;

    @SerializedName("studio")
    public String studio;
}

titleなどのフィールドidを正常にプルyearできますが、Rating クラスのフィールドにアクセスできません ( public List<Rating> ratings)

評価クラスは次のとおりです。

package ---

import com.google.gson.annotations.SerializedName;

public class Rating {

    @SerializedName("critics_rating")
    public String criticsRating;

    @SerializedName("critics_score")
    public int criticsScore;

    @SerializedName("audience_rating")
    public String audienceRating;

    @SerializedName("audience_score")
    public int audienceScore;
}

これは、データを取得しようとしている方法に関連する私の活動からの抜粋です。ほとんどの場合、これは機能します。

InputStream source = retrieveStream(url);

        Gson gson = new Gson();

        Reader reader = new InputStreamReader(source);

        MovieObject mObject = gson.fromJson(reader, MovieObject.class); //Expected BEGIN_ARRAY but was BEGIN_OBJECT instead. Something to do with the Rating object I believe.

        Toast.makeText(this, mObject.title, Toast.LENGTH_SHORT).show();
        Toast.makeText(this, mObject.synopsis,Toast.LENGTH_SHORT).show();

次のようなことをしようとすると、問題が発生します。

List<Rating> ratings = mObject.ratings;
for (Rating rating : ratings) {
    Toast.makeText(this, rating.criticsScore,Toast.LENGTH_SHORT).show();
}

表示されるエラーは次のとおりです。

BEGIN_ARRAY が必要でしたが、28 行目 362 列目で BEGIN_OBJECT でした

MovieObjectRatings 変数を宣言する部分をコメントアウトすると、うまくいきます。それが問題のようです。しかし、それを回避する方法がわかりません。GSON を使用する代わりに、ネイティブの Android JSON 解析を行う方が簡単でしょうか? それともジャクソンを台無しにしますか?

参考までに、Rotten Tomatoes レスポンスの API ビューアーは次のとおりです。 =vg2cj5tgqmbkkxz2vgyxqyh9

4

1 に答える 1

2

これは、評価フィールドが配列ではないためです。

"ratings": {
    "critics_rating": "Certified Fresh",
    "critics_score": 99,
    "audience_rating": "Upright",
    "audience_score": 91
  },

それはオブジェクトです。したがって、次のように宣言するだけですpublic Ratings ratings;

abridged_directors、例えば IS はリストです:

"abridged_directors": [
    {
      "name": "Lee Unkrich"
    }
  ],
于 2012-09-27T22:52:22.793 に答える