下午天氣酷熱,我正在喝著可樂,吹著空調(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)瞇一會了...