我试图使用从API返回的retfit和GSON解析字符串数组:
["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)中,我从registfit/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(...)
“expected BEGIN_ARRAY but was String”意味着Gson正在解析的字符是“
”,但它期望的是[
(因为您试图解析列表)。由于输入与预期的输入不一致,Gson必须失败。从Gson的角度来看,Case2输入与Case1输入没有任何不同(如果NULL是一个问题,那么错误消息将表明这一点)。
因为该输入不受信任(它来自第三方服务器?)您应该在解析调用周围添加一些错误处理代码,以便考虑输入格式错误的可能性。至少,在失败时记录接收到的输入会立即清楚地表明您没有接收到预期的数组。
[失败:com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但BEGIN_OBJECT位于第1行第2列路径$] 我怎么解决?
我在尝试使用JsonConverter填充我的列表视图时遇到此异常 com . Google . gson . jsonsyntaxexception:Java . lang . illegalstateexception:应为BEGIN_ARRAY,但在第1行第1列path处为字符串 这是我的JsonConverter类: 这是我的模型类: 我这样称呼它: 不知道我是不是做错了什么
我想对我的数组使用。 提前致谢
模型类 } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
问题内容: 我有以下课程: 而此代码应解析json: 哪里 JSON是: 我得到的错误是: 但是我不知道为什么,根据jsonlint,json是有效的。 我为什么会收到此错误的任何主意吗? 问题答案: 您的JSON有效-但您的映射类无效(部分不匹配)。特别是,无法将类的属性映射为给定JSON中的a。很难推荐一种备用结构来存储数据而又不会看到较大的示例,但是通常在JSON结构与Java类之间进行映射