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回傳後的結果)
所以只要將程式改寫為用ArrayList去包住Gson的資料物件,即可解決這個錯誤
範例程式碼:
https://github.com/ukyo99999/gsonexample
Reference:
https://github.com/google/gson/blob/master/UserGuide.md
https://stackoverflow.com/questions/9598707/gson-throwing-expected-begin-object-but-was-begin-array
這個錯誤訊息是在告訴你: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-throwing-expected-begin-object-but-was-begin-array
留言
張貼留言