發表文章

目前顯示的是有「Gson」標籤的文章

Gson發生錯誤訊息: JsonParseException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT

圖片
這個算是剛開始用Gson的時候很容易發生的問題, 這個錯誤訊息是在告訴你:API 回傳的結果是JSON的Array結構,但你的程式卻寫為處理Object結構。 首先看一下你的API回傳的格式,以下列的API為例: https://jsonplaceholder.typicode.com/users 回傳的結果為: 從API的回傳結果可以看得出來,最外層是用Array包住,所以如果程式如同下列使用Object包覆的方式撰寫, (下列使用Kotlin的語法撰寫, response為API回傳後的結果) val gson = Gson() val type = object : TypeToken<UserGson>() {}.type val user = gson.fromJson<UserGson>(response,type) 就會出現 JsonParseException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT 所以只要將程式改寫為用ArrayList去包住Gson的資料物件,即可解決這個錯誤 val gson = Gson() val type = object : TypeToken<ArrayList<UserGson>>() {}.type val users = gson.fromJson<ArrayList<UserGson>>(response, type) 範例程式碼: https://github.com/ukyo99999/gsonexample Reference: https://github.com/google/gson/blob/master/UserGuide.md https://stackoverflow.com/questions/9598707/gson-thro...

Gson發生錯誤訊息: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 10 path

圖片
會發生這個錯誤訊息的原因,在於定義某個Json回傳格式有錯誤,像是上述的錯誤就是定義回傳為Object,但收到API回傳的格式為Number 假設我們有個api回傳的JSON如下: 而在撰寫Gson class時定義時不小心寫錯了回傳格式: 就會發生上述的錯誤訊息,解決的方法,再仔細檢查一遍定義格式的Gson class有沒有寫錯,改成下圖的格式就正確了。因為api回傳的JsonObject第一個值是int, 之後才是包了JsonArrary。