2017-02-13 1 views
1

Я разбор следующего формата Json:Использование Retrofit как разбирать JSONArray без разбора объектов?

{ 
msg: "success", 
status_code: 200, 
data: [ 
{ 
.... 
} ] 
} 

и я разбор его с помощью Retorfit2 в объекте:

public class Model { 
    @SerializedName("status_code") 
    int statusCode; 
    @SerializedName("msg") 
    private String statusMsg; 
    @SerializedName("data") 
    private JSONArray data; 

} 

Я хочу, чтобы разобрать «данные», чтобы JSONArray вместо конкретных типов моделей, независимо от структуры его внутренних объектов. Но это дает следующее исключение, в чем проблема?

W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 44 path $.data 
W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 
W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) 
W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) 
W/System.err:  at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37) 
W/System.err:  at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25) 
W/System.err:  at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117) 
W/System.err:  at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211) 
W/System.err:  at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106) 
W/System.err:  at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133) 
W/System.err:  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
W/System.err:  at java.lang.Thread.run(Thread.java:761) 
W/System.err: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 44 path $.data 
W/System.err:  at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) 
W/System.err:  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) 
W/System.err: ... 12 more 
+0

Нет, если вы хотите, чтобы разобрать его самостоятельно, пожалуйста, используйте ScalarConverterFactory получить ответ String. – TruongHieu

+0

выше код теперь работает для меня с JsonArray вместо JSONArray. В любом случае спасибо за ваше предложение :). –

ответ

1

Посмотрите на нижнюю строку кода.

`

public class Model { 
    @SerializedName("status_code") 
    int statusCode; 
    @SerializedName("msg") 
    private String statusMsg; 
    @SerializedName("data") 
    private **ArrayList<JSONObject>** data; 

} 

`

+1

Преобразование JSONArray в JsonArray решило мою проблему. –

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