我有一个JSON响应代表一个看起来像这样的乐队:
[
{
"Picture": {
"Small": "someurl
"Medium": "someurl",
"Large": "someurl",
"XLarge": "someurl"
},
"Name": "Tokyo Control Tower",
"Guid": "TCT",
"ID": 15
}
]
我正在尝试使用GSON将其反序列化为一个名为SearchResults的类,其中包含一个Band列表。我的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的错误说预期BEGIN_OBJECT但是BEGIN_ARRAY。关于如何解决的任何想法?
答案 0 :(得分:3)
你有几个问题。
首先,导致你发布的错误的原因是你告诉Gson你的JSON代表了一个对象(SearchResults
),当它没有;您的JSON是一个对象数组(具体来说,是您要映射到Java Band
类的对象)。
正确的方法是:
Type collectionType = new TypeToken<Collection<Band>>(){}.getType();
Collection<Band> bands = gson.fromJson(jsonString, collectionType);
一旦你这样做,你就会遇到一个问题,你在Java类中说你的JSON中的“图片”是一个Photo
个对象的数组,而事实上并非如此;这是一个单一的对象。