2016-04-22 103 views
1

这是我的JSON预计BEGIN_ARRAY但BEGIN_OBJECT在行1列96路

{ 
    "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) 
+0

请张贴错误的logcat .... – sushildlh

+0

好像我改变从对象数组我的反应,它会说需要一个ARRY却得到了一个对象.... – JoeKevin

+0

您的JSON开始与arrya – sushildlh

回答

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" 
    }, 
... ] 

} } 

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

+1

感谢您改进我的json格式,但是如何使用Retrofit 2.0分析“响应”有两种类型的json? – JoeKevin

+0

对于这种情况,您必须手动解析,从Retrofit中获取JsonObject。然后解析它,检查它是否是json对象或数组。 –