1
私はJSONの次のフォーマットを解析しています:改造を使用する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
自分でそれを解析したい場合はいいえ、文字列の応答を受信するScalarConverterFactoryを使用してください。上記のコード – TruongHieu
は、JSONArrayの代わりにJsonArrayで私のために働いています。とにかくあなたの提案のおかげで:) 。 –