2016-04-22 5 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/

и я нахожу ошибку в названии из двух «ответов», которые являются массивом и объектом.

Как я уже сказал, Ianalyze, что с помощью Retrofit, как я могу анализировать json, как это, с помощью «повторения» двух типов (массив и объект) с помощью Retrofit2.0? Благодаря ~ *

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

для этого случая вам нужно разобрать вручную, получить JsonObject из Retrofit. затем проанализируйте его с помощью проверки, является ли это json-объектом или массивом. –

Смежные вопросы