android - 将 GSON 与烂番茄 API 结合使用时出现的问题(Android)

标签 android json gson rotten-tomatoes

我正在尝试在 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之类的字段, idyear但无法访问我的评级类中的字段 ( 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;
}

以下是我的 Activity 的一些摘录,涉及我如何尝试获取数据。在大多数情况下,这是有效的。

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();
}

显示的错误是:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 28 column 362

如果我注释掉MovieObject中的部分我在其中声明评级变量...一切正常。所以这似乎就是问题所在。但我不知道如何解决这个问题。只进行原生 Android JSON 解析而不是尝试使用 GSON 会更容易吗?或者惹恼 jackson ?

作为引用,这里是烂番茄响应的 api 查看器:http://jsonviewer.stack.hu/#http://api.rottentomatoes.com/api/public/v1.0/movies/770672122.json?apikey=vg2cj5tgqmbkkxz2vgyxqyh9

最佳答案

嗯,那是因为评级字段不是数组:

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

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

abridged_directors,例如,是一个列表:

"abridged_directors": [
    {
      "name": "Lee Unkrich"
    }
  ],

关于android - 将 GSON 与烂番茄 API 结合使用时出现的问题(Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630986/

相关文章:

android - 保护应用程序中的对称 key

android - 了解手机上的 Bootstrap 布局

c# - 无法从 JSON 字符串构造对象

Android json 错误 com.google.gson.JsonSyntaxException : java. lang.IllegalStateException

c++ - QT中如何从json中加载base64图片数据

java - 使用 Gson 从 JSON URL 创建 java 对象的数组列表

java - 自定义 ParseQueryAdapter 的问题

android - 每次打开xml文件时eclipse从2.3加载数据到4.4

html - 将 json 字符串显示到 html div

java - Android:从 JSON 动态获取 JSON 数组键名