昨天在weex项目中发现一个异常,只在android中出现,经调试发现异常出现在js代码中, 如下位置,confirm属性address notfound,confirm值显示为undefined
js获取到数据结构如下
接口获取数据结构如下
对比发现js取到的数据缺少address属性,已知js数据由android端获取,应该是android端对数据做了处理,跟踪发现数据改变位置如下
查询发现原因是com.alibaba.fastjson JSON.toJSONString(obj)后默认去掉了值为null的属性。
解决方法(供参考)
1.将JSON.toJSONString(obj)改为JSON.toJSONString(obj,SerializerFeature.WriteMapNullValue)
SerializerFeature可选值如下:
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
由于fromObjectToJSONString在weexsdk内多个地方有调用,没有一一去查看,可能导致一些地方没有判空问题,另外,做此处理后,前端js中取值的地方更易出现值为null的情况,对此需注意相关代码判空,等尽量书写规范。
2.weex原项目中有此问题issues
https://github.com/alibaba/weex/issues/1133
此issues已close,现weex项目已搬迁,建议查看weex官方处理。