Gson解析出现lang.IllegalStateException: Expected a string but was BEGIN_ARRAY

下午天气酷热,我正在喝着可乐,吹着空调,突然天津的同事反馈,有一个bug,导致APP奔溃

我一听,那还得了,赶紧前去查看,一看发现我们设备录入几十个人的信息,都没问题...

但是,只有一个人在身份证注册以后,再次登录,点击个人信息,就出现APP奔溃...

我一摸胸膛,偶发bug....额...这能难倒我...我就和他说.你重启一下机器试试...

他重启以后说,不行...好吧....额.....那我就出手吧

所以我和他要了账号密码,在我这里登录,然后我小手一点,我的天,果然奔溃了....这这么办,我顿时慌了,我是不是又犯错误了,我是不是要没工作了...

在经历了无数的思想斗争后,我觉得还是可以试试操作的,所以我大胆的去查看日志,然后发现lang.IllegalStateException: Expected a string but was BEGIN_ARRAY,这是什么鬼?要求一个string ,你却给了我一个array....

好吧,看来是服务器给的数据格式不对,我一看可以不背锅了,可以推卸责任了,想想都觉得开心...

可是回头一想,算了,还是我处理掉吧...毕竟服务器的哥们,刚失恋了,不去打扰他了....

然后我debug了一下,把json数据打出来一看

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


哦  原来是有[],导致我的json解析工具以为他是一个array,这是Gson的一个坑....

如果你用Gson解析一段json,想把一个属性定义成String,来接收所有的数据类型,拿到解析出来的String再做处理,结果就会遇到这个异常. 

定义的对象的某个属性是string类型的,但json中却是Array类型的.你就要注意了

因为Gson中,关键字后面出现""引起来的内容将会被只认为是STRING,“{}”只被认为是类,“[]”只被认为是List,这个几乎是强制性的。

所以,你改变不了后台发过来的数据,你有改变不了GSON,那么你就有一个办法了,去找马云.....他们公司开源的fastjson

所以我大胆的把GSON解析

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

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



换成了

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

然后问题解决了,

然后我又可以喝着可乐,吹着空调眯一会了...

你可能感兴趣的:(Gson解析出现lang.IllegalStateException: Expected a string but was BEGIN_ARRAY)