Gson解析出現(xiàn)lang.IllegalStateException: Expected a string but was BEGIN_ARRAY

下午天氣酷熱,我正在喝著可樂,吹著空調(diào),突然天津的同事反饋,有一個bug,導(dǎo)致APP奔潰

我一聽,那還得了,趕緊前去查看,一看發(fā)現(xiàn)我們設(shè)備錄入幾十個人的信息,都沒問題...

但是,只有一個人在身份證注冊以后,再次登錄,點擊個人信息,就出現(xiàn)APP奔潰...

我一摸胸膛,偶發(fā)bug....額...這能難倒我...我就和他說.你重啟一下機器試試...

他重啟以后說,不行...好吧....額.....那我就出手吧

所以我和他要了賬號密碼,在我這里登錄,然后我小手一點,我的天,果然奔潰了....這這么辦,我頓時慌了,我是不是又犯錯誤了,我是不是要沒工作了...

在經(jīng)歷了無數(shù)的思想斗爭后,我覺得還是可以試試操作的,所以我大膽的去查看日志,然后發(fā)現(xiàn)lang.IllegalStateException: Expected a string but was BEGIN_ARRAY,這是什么鬼?要求一個string ,你卻給了我一個array....

好吧,看來是服務(wù)器給的數(shù)據(jù)格式不對,我一看可以不背鍋了,可以推卸責(zé)任了,想想都覺得開心...

可是回頭一想,算了,還是我處理掉吧...畢竟服務(wù)器的哥們,剛失戀了,不去打擾他了....

然后我debug了一下,把json數(shù)據(jù)打出來一看

[{ "date": [], "ohter": "", "value": "高血壓" }, { "date": "2017-03-01", "ohter": "", "value": "糖尿病" }]


哦 ?原來是有[],導(dǎo)致我的json解析工具以為他是一個array,這是Gson的一個坑....

如果你用Gson解析一段json,想把一個屬性定義成String,來接收所有的數(shù)據(jù)類型,拿到解析出來的String再做處理,結(jié)果就會遇到這個異常.?

定義的對象的某個屬性是string類型的,但json中卻是Array類型的.你就要注意了

因為Gson中,關(guān)鍵字后面出現(xiàn)""引起來的內(nèi)容將會被只認(rèn)為是STRING,“{}”只被認(rèn)為是類,“[]”只被認(rèn)為是List,這個幾乎是強制性的。

所以,你改變不了后臺發(fā)過來的數(shù)據(jù),你有改變不了GSON,那么你就有一個辦法了,去找馬云.....他們公司開源的fastjson

所以我大膽的把GSON解析

Gson gson = new MyGsonBuilder().createGson();

?List sickspublic = gson.fromJson(sick, new TypeToken>() { }.getType());



換成了

List sickspublic = JSON.parseObject(sick,new TypeReference>(){});

然后問題解決了,

然后我又可以喝著可樂,吹著空調(diào)瞇一會了...

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容