首页 > Java > java教程 > 为什么 GSON 在解析 JSON 时会抛出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?

为什么 GSON 在解析 JSON 时会抛出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?

Barbara Streisand
发布: 2024-12-21 16:38:10
原创
302 人浏览过

Why Does GSON Throw

GSON 抛出“预期是 BEGIN_OBJECT 但实际上是 BEGIN_ARRAY”?

当尝试使用 GSON 将 JSON 字符串解析为对象列表时,您可能会遇到“预期的 BEGIN_OBJECT 但实际上是 BEGIN_ARRAY” 错误。当提供的 JSON 数据是一个数组,而您需要一个对象时,就会发生这种情况。

要解决此问题,您应该调整解析代码以适应数组结构。以下是问题的细分和正确的解决方案:

问题:

提供的 JSON 数据是对象数组而不是单个对象。但是,您的代码尝试将其解析为单个对象,从而导致错误。

解决方案:

要修复它,您需要指定 JSON代表一个对象数组。这可以通过修改代码将 JSON 解析为对象类的数组来完成:

ChannelSearchEnum[] enums = gson.fromJson(jstring, ChannelSearchEnum[].class);
登录后复制

这样,GSON 就会正确地将 JSON 解析为 ChannelSearchEnum 对象的数组。

替代解决方案:

为了获得更大的灵活性,您可以使用 TypeToken 类来定义参数化类型对于您想要解析的集合,如下所示:

Type collectionType = new TypeToken<Collection<ChannelSearchEnum>>() {}.getType();
Collection<ChannelSearchEnum> enums = gson.fromJson(jstring, collectionType);
登录后复制

这种方法允许您将 JSON 解析为 ChannelSearchEnum 对象的集合,该集合可以是 List、Set 或任何其他集合类型.

以上是为什么 GSON 在解析 JSON 时会抛出'Expected BEGIN_OBJECT but was BEGIN_ARRAY”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板