2

我正在尝试使用 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;
}

我可以成功提取诸如titleidyear无法访问我的 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

4

1 回答 1

2

好吧,那是因为 rating 字段不是数组:

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

它是一个对象。因此,只需将其声明为public Ratings ratings;

abridged_directors,例如,是一个列表:

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