【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 96 path预期为 BEGIN_ARRAY,但在第 1 行第 96 列路径为 BEGIN_OBJECT
【发布时间】:2016-04-22 08:04:39
【问题描述】:

这是我的json

{
    "success": true,
    "error": null,
    "responseA": {
        "responseB": [{
                    "response": {...},
                    "request": "\/observations\/atlanta,ga"
                }, {
                    "response": [{...}],
                    "request": "\/forecasts\/atlanta,ga"
                },
                ...
            ]
    }
}

我从这里为 json 创建我的类: http://www.jsonschema2pojo.org/

我发现标题的错误来自数组和对象这两个“响应”。

正如我所说的我用Retrofit分析那个,我怎样才能用Retrofit2.0的两种类型(数组和对象)的“repsonse”来分析这样的json?谢谢~*

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();`

这是日志:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 96 path $.response.responses[0].response
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
      at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
      at com.google.gson.Gson.fromJson(Gson.java:810)
      at com.google.gson.Gson.fromJson(Gson.java:775)
      at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:36)
      at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:24)
      at retrofit.OkHttpCall.parseResponse(OkHttpCall.java:148)
      at retrofit.OkHttpCall.execute(OkHttpCall.java:116)
      at retrofit.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:61)

【问题讨论】:

  • 请发布错误 logcat ....
  • 好像我将响应从对象更改为数组,它会说需要一个数组但得到一个对象....
  • 你的 json 以 arrya 开头
  • 普通 json 以 { } barces 开头,数组 json 以 [ ] barces ....
  • 你能修正你的格式吗?我看了看,但如果我编辑它,那么你的一些故意可能会丢失,因为有一些歧义。谢谢...

标签: android json retrofit2


【解决方案1】:

你的 json 有错误:

responseB 第一个对象有一个响应对象,第二个对象有一个响应数组。这是造成问题

{

"success":true,

"error":null,

"responseA":{

  "responseB":[  
     {  

        "response":{... ***// This is object***
              },
        "request":"\/observations\/atlanta,ga"
     },
     {  
        "response":[   ***// This is Array***
           { ...
              }
        ],
        "request":"\/forecasts\/atlanta,ga"
     },
... ]

} }

您已经为数组对象创建了相同的结构。 希望这有帮助。 谢谢

【讨论】:

  • 感谢改进我的json格式,但是如何使用Retrofit 2.0来分析“响应”有两种类型的json呢?
  • 对于这种情况,您必须手动解析,从 Retrofit 获取 JsonObject。然后解析它,检查它是json对象还是数组..
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2020-01-06
  • 2019-05-03
  • 2017-07-17
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多