我正在尝试使用 Android 中的 GSON 解析来自烂番茄 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 变量的部分......一切正常。所以这似乎是问题所在。但我不知道如何解决这个问题。只进行原生 Android JSON 解析而不是尝试使用 GSON 会更容易吗?还是惹杰克逊?
作为参考,这里是烂番茄响应的 api 查看器:http://jsonviewer.stack.hu/#http: //api.rottentomatoes.com/api/public/v1.0/movies/770672122.json? apikey =vg2cj5tgqmbkkxz2vgyxqyh9