weex 问题处理: Android 处理 json 对象中属性值为 null

昨天在weex项目中发现一个异常,只在android中出现,经调试发现异常出现在js代码中, 如下位置,confirm属性address notfound,confirm值显示为undefined

js获取到数据结构如下

weex 问题处理: Android 处理 json 对象中属性值为 null_第1张图片


接口获取数据结构如下

weex 问题处理: Android 处理 json 对象中属性值为 null_第2张图片

对比发现js取到的数据缺少address属性,已知js数据由android端获取,应该是android端对数据做了处理,跟踪发现数据改变位置如下


weex 问题处理: Android 处理 json 对象中属性值为 null_第3张图片

查询发现原因是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官方处理。

你可能感兴趣的:(weex 问题处理: Android 处理 json 对象中属性值为 null)