0

我有一个代表 Band 的 JSON 响应,如下所示:

[
 {
  "Picture": {
  "Small": "someurl
  "Medium": "someurl",
  "Large": "someurl",
  "XLarge": "someurl"
},
"Name": "Tokyo Control Tower",
"Guid": "TCT",
"ID": 15
 }
]

我正在尝试使用 GSON 将其反序列化为一个名为 SearchResults 的类,其中包含一个乐队列表。我的 SearchResults 和 Band 类如下所示:

public class SearchResults {
    public List<Band> results;
}

public class Band {
    @SerializedName("Name")
    public String name;

    @SerializedName("Guid")
    public String guid;

    @SerializedName("ID")
    public Integer id;

    @SerializedName("Picture")
    List<Photo> pictures;

}

在我的代码中,我尝试像这样转换 json 字符串:

protected void onPostExecute(String result) {
        Gson gson = new Gson();
        SearchResults results = gson.fromJson(result, SearchResults.class);
        Band band = results.results.get(0);
        bandName.setText(band.name);
    }

当我运行此代码时,我从 GSON 收到一个错误,提示 Expected BEGIN_OBJECT but is BEGIN_ARRAY。关于如何解决的任何想法?

4

1 回答 1

3

你有几个问题。

首先,导致您发布错误的原因是您告诉 Gson 您的 JSON 代表一个对象 ( SearchResults),而实际上它不是;您的 JSON 是一个对象数组(特别是您映射到 JavaBand类的对象)。

正确的方法是通过:

Type collectionType = new TypeToken<Collection<Band>>(){}.getType();
Collection<Band> bands = gson.fromJson(jsonString, collectionType);

一旦你这样做了,你就会在你的 Java 类中遇到问题,你说 JSON 中的“图片”是一个Photo对象数组,而实际上它不是;这是一个单一的对象。

于 2013-08-22T16:04:11.233 回答