【问题标题】:Using Retrofit how to parse JSONArray without objects parsing?使用 Retrofit 如何在不解析对象的情况下解析 JSONArray?
【发布时间】:2017-02-13 10:31:22
【问题描述】:

我正在解析以下格式的 Json:

{
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接收String响应。
  • 上面的代码现在可以使用 JsonArray 而不是 JSONArray 为我工作。无论如何感谢您的建议:)。

标签: android json gson retrofit2


【解决方案1】:

看看下面的代码行。

`

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

}

`

【讨论】:

  • 将 JSONArray 转换为 JsonArray 解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多