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 でした
MovieObject
Ratings 変数を宣言する部分をコメントアウトすると、うまくいきます。それが問題のようです。しかし、それを回避する方法がわかりません。GSON を使用する代わりに、ネイティブの Android JSON 解析を行う方が簡単でしょうか? それともジャクソンを台無しにしますか?
参考までに、Rotten Tomatoes レスポンスの API ビューアーは次のとおりです。 =vg2cj5tgqmbkkxz2vgyxqyh9