2017-07-14 231 views
0

我有我的JSON作爲:JsonSyntaxException預計BEGIN_OBJECT但BEGIN_ARRAY在路徑

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

}

我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( 「行」)是的JSONObject,該代碼是正確的,但現在, jsonObject.get( 「行」)是jsonArray

錯誤:

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

你能告訴我在去行列的時候哪裏出錯了?

回答

1

相反的jsonObject.get("rows"),使用下面syndax

jsonObject.getAsJsonArray("rows")

+1

您的回答是我的問題的完美解決方案,謝謝 –

0

除了Mani的評論,我認爲你可能會遇到更多的問題,因爲rows是行類型,T的數組。看起來您應該將RowsBean的實施更改爲包含rows類型的T[]而不是T

+0

感謝您的幫助,我改進了代碼並將它用在實現類中。像這樣Observable >> –

相關問題