我在使用retrofit和Gson配合時,出現(xiàn)了這個問題,疑惑中亂七八糟瞎搞了一個下午沒有解決。期間懷疑Gson解析不能使用泛型(因為我的解析使用了泛型),后來又覺得可能是我的關(guān)鍵字正好是解析器的某個關(guān)鍵字導(dǎo)致的異常,也打算過自定義Gson的解析過程,其實這些都不是。
第二天才搞明白,真正的問題是我的數(shù)據(jù)結(jié)構(gòu)有問題,或者說我的解析出現(xiàn)了問題。
例如下面Json字符串:
{"code":1,"info":"success","results":{"id":"1","name":"hehe"}}
results對應(yīng)的應(yīng)該是一個實體類,如果這個時候想把他解析為String或者List就會出現(xiàn)異常。
如果參考使用GsonForm處理后的數(shù)據(jù)模型,幾乎不會出現(xiàn)問題;加入result后面的內(nèi)容可能在請求時會因為某些原因會存在格式上的變化,這個時候就有出現(xiàn)該異常的風(fēng)險。Gson中,關(guān)鍵字后面出現(xiàn)""引起來的內(nèi)容將會被只認(rèn)為是STRING,“{}”只被認(rèn)為是類,“[]”只被認(rèn)為是List,這個幾乎是強(qiáng)制性的。
就是說如果你的實體預(yù)計是獲取String的變量,但是關(guān)鍵字后面對應(yīng)的卻出現(xiàn)了“{”或“[”,那么這個轉(zhuǎn)換將被認(rèn)為是錯誤的,拋出異常。
解決辦法:后臺輸出穩(wěn)定的Gson格式。
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
- Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
- 元規(guī)律第一次聽過哪些人說呢?李笑來、易仁永澄、日日。今天,也是一件小事,大概也比較深刻認(rèn)識了元規(guī)律。 來深圳一個多...