GSON 预期为 BEGIN_ARRAY,但在第 1 行错误为 STRING

2024-05-28

我正在尝试使用 Retrofit 和 GSON 解析从 API 返回的字符串数组:

响应通常如下所示(案例 1):

["Scan finished, scan information embedded in this object", "https://www.virustotal.com/url/297c349554bdc7e2f09a85be309f08cb2f16a9174068bd5bc6e298ed90a5eed9/analysis/1485313628/", 8, 64]

这是特定情况下的响应(案例 2):

["Scan request successfully queued, come back later for the report", "https://www.virustotal.com/url/d06ed0b4b29aab735ee7b85c5c0af98fd4d983edcc597afe60e4c4ac2e25ea08/analysis/1485847248/", null, null]

在这种情况下(案例 2),我从 Retrofit/GSON 收到错误:

W/System.err: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err:     at java.lang.Thread.run(Thread.java:761)

我这样调用 API:

Call<ArrayList<String>> scanResults = myAPI.getScanResults(id);
scanResults.enqueue(...)

在正常情况下(情况 1),数组填充得很好,但在这种情况下(情况 2),它会抛出错误。

我认为这是因为空值。我尝试使用自定义类型适配器,但它没有解决问题,在 GsonBuilder 上设置 serializeNulls() 也没有解决问题。

有谁知道解决方案吗?

编辑:经过更多调试后,由于某种原因,服务器似乎在案例 2 中返回一个字符串而不是字符串数组。当我手动访问链接时,我确实看到了字符串数组,但由于某种原因,响应是字符串。


"应为 BEGIN_ARRAY,但实际为 STRING" 表示 Gson 正在解析的字符是",但它期望[(因为您正在尝试解析列表)。由于输入与预期输入不对应,Gson 必须失败。从 Gson 的角度来看,情况 2 输入与情况 1 输入没有任何不同(如果空值是一个问题,错误消息会说明这一点)。

由于此输入不受信任(它来自第三方服务器?),您应该在解析调用周围添加一些错误处理代码,以考虑输入格式错误的可能性。至少在失败时记录接收到的输入将立即表明您没有收到预期的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GSON 预期为 BEGIN_ARRAY,但在第 1 行错误为 STRING 的相关文章

随机推荐

  • 如何将 JsonNode 转换为 ObjectNode

    我有一个com fasterxml JsonNode带有一些数据的对象 我需要对其数据进行一些操作 我用谷歌搜索答案但没有得到正确的答案 您能建议我如何操作 JsonNode 数据吗 我也尝试过转换JsonNode to ObjectNod
  • C++:如何构建没有 void 指针的事件/消息系统?

    我希望在我的 C 项目中拥有一个动态消息传递系统 其中有一个固定的现有事件列表 事件可以在运行时的任何地方触发 并且您可以在其中订阅某些事件的回调函数 应该有一个选项可以在这些事件中传递参数 例如 一个事件可能不需要任何参数 EVENT E
  • Angular 中的单元测试点击事件

    我正在尝试将单元测试添加到我的 Angular 2 应用程序中 在我的一个组件中 有一个带有 click 处理程序 当用户单击按钮时 将调用在中定义的函数 ts类文件 该函数在 console log 窗口中打印一条消息 表明该按钮已被按下
  • 在所有延迟的作业之前挂钩

    是否可以在所有delayed job任务之前运行一个方法 基本上 我们试图确保每台运行delayed job的服务器都有我们代码的最新实例 因此我们希望运行一个方法来在每个作业运行之前检查这一点 我们已经有了 check 方法并在其他地方使
  • 如何每隔一行读取 CSV 文件

    如何从 CSV 文件中每 2 行获取数据 例如 如果我有一个看起来像这样的文件 0 1 0 23 34 1 45 45 2 78 16 3 110 78 4 48 14 5 76 23 6 55 33 7 12 13 8 18 76 如何迭
  • 我可以向 DOM 对象添加任意属性吗?

    我可以向 JavaScript DOM 对象添加任意属性 例如
  • React - 能够通过 props 控制 SVG 的填充颜色

    我有一个 SVG 这里称为 example svg 它作为组件被调用和创建 如下所示 import ReactComponent as Example from example svg import styles from index mo
  • Blazor / SVG 实时更新

    我正处于使用 Blazor 开发实时 Web 应用程序的早期阶段 目的是在网页上显示与某些设备的状态有关的实时状态更新 它是机器的 HMI 可以将其视为具有实时数据更新的仪表板 机器的图形模型将使用 SVG 完成并托管在应用程序中 我正在尝
  • Ruby On Rails 与 Windows Vista - 最佳设置? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您认为 Win Vista 环境中 RoR 的最佳设置是什么 我尝试过 radrails eclipse 插件 它对我来说似乎太庞大了 我也开始
  • Roslyn 将内容嵌入到程序集中

    是否可以嵌入content使用 roslyn 进入程序集 嵌入资源效果很好 但不知道如何添加内容 我添加这样的资源 foreach string file in Directory GetFiles inputPath Where item
  • 只有一组多次捕获

    String 50 60 70 50 1 7 9 51 5 9 10 Want 9 51 Tried G K d Result 1 7 9 51 看来您正在使用 PCRE 正则表达式来获取可以在内部数学运算符前面添加的数字 没有内在的 Us
  • 如何通过 Viber 和 google Hangout 分享可绘制图像?

    当我通过 Whatsapp 分享图像时 我的代码工作正常 但对于 Viber 和 google Hangout 我收到 找不到照片 错误 这是我的代码 int ImageResourse imageAdapter mThumbIds pos
  • setuptools 并将选项传递给依赖项

    我正在尝试为 pypi 打包一个模块 并且我将 Mercurial 作为依赖项之一 目标计算机可能有也可能没有构建工具 因此我想使用 pure 选项安装 Mercurial 但我找不到指示 setup py 以指定方式安装依赖项的方法 除了
  • 预增量没有按我的预期工作

    我正在尝试通过在线解决一些问题来学习动态规划 我遇到的一个问题需要处理以下输入 4 10 3 4 4 5 6 7 5 7 第一个指向项目数量 第二个指向总容量 其余四个 成对 现在应该指向价值和容量 我遇到的问题是解析它的代码 includ
  • 如何在 Fluent NHibernate ClassMap 类中指定表名?

    我是 NHibernate 的新手 正在尝试使用 Fluent 进行映射 我的实体类名称与它必须映射到的数据库表名称不同 我正在使用派生的映射类ClassMap lt gt 但我无法指定表名 属性TableName from ClassMa
  • jQuery 验证在 IE7 + IE8 中不起作用

    我正在尝试使用jQuery 验证 http bassistance de jquery plugins jquery plugin validation 我网站上的表单上的插件 该表单适用于 FF Chrome Opera 和 Safari
  • 使用 JavaScript 获取图像的一部分

    是否可以显示图像的任何部分img通过 JavaScript 标记 带有像素 我将准备一个大图像 例如 32x320 像素 并定义起始位置 X Y 例如 0 32 和宽度 高度 例如 32 32 并且希望脚本显示第二个 32x32 像素 部分
  • 如何编辑范围? // Google Classroom 控制 Google Apps 脚本中学生访问的权限范围

    我是一名高中老师 正在针对 Google Classroom 编写 Google Apps 脚本 我想创建一个类似于学生成绩视图的电子表格 我的学生可以使用他们的凭据进行访问 我已经成功编写了代码 这样我就可以通过在代码中显式放置学生的 I
  • java中的语音识别

    我想在我的项目中使用语音识别 我找到了这段代码 但是当我运行它时 我收到一个错误 run java lang NullPointerException at newpackage HelloWorld main HelloWorld jav
  • GSON 预期为 BEGIN_ARRAY,但在第 1 行错误为 STRING

    我正在尝试使用 Retrofit 和 GSON 解析从 API 返回的字符串数组 响应通常如下所示 案例 1 Scan finished scan information embedded in this object https www