昨天在weex項(xiàng)目中發(fā)現(xiàn)一個(gè)異常,只在android中出現(xiàn)席赂,經(jīng)調(diào)試發(fā)現(xiàn)異常出現(xiàn)在js代碼中, 如下位置杯活,confirm屬性address notfound霹抛,confirm值顯示為undefined
js獲取到數(shù)據(jù)結(jié)構(gòu)如下
接口獲取數(shù)據(jù)結(jié)構(gòu)如下
對(duì)比發(fā)現(xiàn)js取到的數(shù)據(jù)缺少address屬性,已知js數(shù)據(jù)由android端獲取轮听,應(yīng)該是android端對(duì)數(shù)據(jù)做了處理骗露,跟蹤發(fā)現(xiàn)數(shù)據(jù)改變位置如下
查詢發(fā)現(xiàn)原因是com.alibaba.fastjson JSON.toJSONString(obj)后默認(rèn)去掉了值為null的屬性。
解決方法(供參考)
1.將JSON.toJSONString(obj)改為JSON.toJSONString(obj,SerializerFeature.WriteMapNullValue)
SerializerFeature可選值如下:
QuoteFieldNames———-輸出key時(shí)是否使用雙引號(hào),默認(rèn)為true
WriteMapNullValue——–是否輸出值為null的字段,默認(rèn)為false
WriteNullNumberAsZero—-數(shù)值字段如果為null,輸出為0,而非null
WriteNullListAsEmpty—–List字段如果為null,輸出為[],而非null
WriteNullStringAsEmpty—字符類型字段如果為null,輸出為”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果為null,輸出為false,而非null
由于fromObjectToJSONString在weexsdk內(nèi)多個(gè)地方有調(diào)用血巍,沒有一一去查看萧锉,可能導(dǎo)致一些地方?jīng)]有判空問題,另外述寡,做此處理后柿隙,前端js中取值的地方更易出現(xiàn)值為null的情況,對(duì)此需注意相關(guān)代碼判空辨赐,等盡量書寫規(guī)范优俘。
2.weex原項(xiàng)目中有此問題issues
https://github.com/alibaba/weex/issues/1133
此issues已close,現(xiàn)weex項(xiàng)目已搬遷,建議查看weex官方處理。