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中文网其他相关文章!