GSON正在抛出“预期的BEGIN\u对象,但它是BEGIN\u数组”?

我正在尝试解析一个JSON字符串,就像这样

[
{
更新日期:“2012-03-02 21:06:01”,
“获取时间”:“2012-03-02 21:28:37.728840”,
“描述”:空,
“语言”:空,
“头衔”:“约翰”,
“url”:”http://rus.JOHN.JOHN/rss.php",
“图标url”:空,
“logo_url”:空,
“id”:“4f4791da203d0c2d76000035”,
“已修改”:“2012-03-02 23:28:58.840076”
},
{
更新日期:“2012-03-02 14:07:44”,
“获取时间”:“2012-03-02 21:28:37.033108”,
“描述”:空,
“语言”:空,
“头衔”:“彼得”,
“url”:”http://PETER.PETER.lv/rss.php",
“图标url”:空,
“logo_url”:空,
“id”:“4f476f61203d0c2d89000253”,
“已修改”:“2012-03-02 23:28:57.928001”
}
]

进入一个对象列表

列表<ChannelSearchEnum>lcs=(List<ChannelSearchEnum>)new Gson().fromJson(jstring,ChannelSearchEnum.class);

这是我正在使用的一个对象类

导入com.google.gson.annotations.SerializedName;
公共类ChannelSearchEnum{
@SerializedName(“更新时间”)
私有字符串更新_at;
@SerializedName(“获取时间”)
获取的私有字符串;
@序列化名称(“说明”)
私有字符串描述;
@序列化名称(“语言”)
私有字符串语言;
@序列化名称(“标题”)
私有字符串标题;
@序列化名称(“url”)
私有字符串url;
@SerializedName(“图标url”)
私有字符串图标\u url;
@SerializedName(“徽标_url”)
私有字符串logo_url;
@序列化名称(“id”)
私有字符串id;
@序列化名称(“已修改”)
修改私有字符串;
公共最终字符串get_Updated_at(){
返回此。更新的_地址;
}
公共最终字符串get_Fetched_at(){
返回此。已获取\u于;
}
公共最终字符串get_Description(){
返回此.description;
}
公共最终字符串get_Language(){
返回此.language;
}
公共最终字符串get_Title(){
返回此.title;
}
公共最终字符串get_Url(){
返回this.url;
}
公共最终字符串get_Icon_url(){
返回此.icon\u url;
}
公共最终字符串get_Logo_url(){
返回此.logo\u url;
}
公共最终字符串get_Id(){
返回此.id;
}
公共最终字符串get_Modified(){
返回此文件。已修改;
}
}

但这让我很沮丧

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列为BEGIN_数组

你知道我该怎么修吗

问题是你告诉Gson你有一个属于你类型的对象。你没有。您有一个类型的对象数组。你不能只是试着把结果变成那样,然后期待它神奇地工作;)

Gson的用户指南解释了如何处理此问题:

https://github.com/google/gson/blob/master/UserGuide.md

这将有助于:

ChannelSearchEnum[]enums=gson.fromJson(yourJson,ChannelSearchEnum[].class);

但这更好:

Type collectionType=new-TypeToken<收藏<ChannelSearchEnum&gt&燃气轮机;(){}.getType();
收藏<ChannelSearchEnum>enums=gson.fromJson(yourJson,collectionType);

发表评论