JsonSyntaxException预期BEGIN_OBJECT但在路径上是BEGIN_ARRAY

时间:2017-07-14 11:26:34

标签: android json gson

我的json是:

{
"status": "true",
"rows": [
    {
        "rec_time": "2017-05-02 11:08:00 "
    },
    {
        "rec_time": "2017-05-02 10:08:15 "
    }
],
"total": 10000,
"code": 200

}

My RowsBean模型为:

public class RowsBean<T> extends BaseBean {


    private T rows;
    private int total;


    public T getRows() {
        return rows;
    }

    public void setRows(T rows) {
        this.rows = rows;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

}

public class DataBean {

    private String rec_time;

    public String getRec_time() {
        return rec_time;
    }

    public void setRec_time(String rec_time) {
        this.rec_time = rec_time;
    }

我的gson自定义反序列化器如下:

public class RowsJsonDeser implements JsonDeserializer<RowsBean<?>> {

    @Override
    public RowsBean<?> deserialize(JsonElement json, Type typeOfT,
                                     JsonDeserializationContext context) throws JsonParseException {

        RowsBean resultBean = new RowsBean();
        if (json.isJsonObject()) {
            JsonObject jsonObject = json.getAsJsonObject();

            Type type = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];
           resultBean.setRows(context.deserialize(jsonObject.get("rows"),type));


        }
        return resultBean;
    }
}

我正在使用Retrofit库,它使用gson序列化/反序列化json对象。我通过这个自定义gson反序列化器进行改造,但它给了我一个错误。

如果jsonObject.get(“rows”)是jsonObject,代码是正确的,但现在, jsonObject.get(“rows”)是jsonArray

错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $

你能告诉我在去骨化的时候我哪里出错吗?

2 个答案:

答案 0 :(得分:1)

使用以下syndax

而不是jsonObject.get("rows")
  

jsonObject.getAsJsonArray( “行”)

答案 1 :(得分:0)

除了Mani的评论之外,我相信您可能会遇到更多问题,因为rows是行类型T的数组。您似乎应该将RowsBean的实施更改为包含rows类型的T[],而不是 T