下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用JSONObject需要注意避免什么問(wèn)題
這篇文章給大家分享的是有關(guān)使用JSONObject需要注意避免什么問(wèn)題的內(nèi)容。在下覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨在下過(guò)來(lái)看看吧。問(wèn)題現(xiàn)象在Android業(yè)務(wù)同步的邏輯代碼中,使用到了JSONObject來(lái)解析服務(wù)端的JSON
數(shù)據(jù)。同時(shí)本地因?yàn)闃I(yè)務(wù)新增需求的緣故,在本地?cái)?shù)據(jù)庫(kù)中使用JSONObject緩存了包括水位等同步相關(guān)的信息,其中,水位值是Long
型。但近期發(fā)現(xiàn)同步過(guò)程中下一次同步時(shí),傳遞給服務(wù)器的水位并不是上一次服務(wù)器返回的新水位,而是相差一些。以301028292893495297L
為例,服務(wù)器返回這個(gè)水位之后,下次客戶(hù)端上傳的水位是301028292893495296L,差值為-1。問(wèn)題排查通過(guò)反復(fù)排查代碼邏輯,發(fā)現(xiàn)水位從服務(wù)端返回到下次請(qǐng)求之間,只經(jīng)過(guò)了以下轉(zhuǎn)換:認(rèn)真閱讀代碼不難發(fā)現(xiàn),Long型的水位值保存在JSON對(duì)象中的時(shí)候轉(zhuǎn)成了String型,而在讀取的時(shí)候又當(dāng)作是Long
型來(lái)處理。因此會(huì)有精度缺失的問(wèn)題,參見(jiàn)如下JSONObject的文檔:由此可見(jiàn),在讀取JSON對(duì)象的某個(gè)值時(shí),如果原先是String型,讀取的時(shí)候當(dāng)作是Long型,是會(huì)將String型通過(guò)Double
進(jìn)行解析的,所以在值超過(guò)2^52時(shí)會(huì)有精度缺失的問(wèn)題。于是,遇到的問(wèn)題就可以解釋了。以下是Double的存儲(chǔ)格式規(guī)范:其中,Double和Long的精度測(cè)試代碼很簡(jiǎn)單(輸入?yún)?shù)可以提供例如301028292893495297L這樣超過(guò)2^52的long
值,會(huì)發(fā)現(xiàn)其返回值不為0):Double和Long的精度測(cè)試代碼很簡(jiǎn)單(輸入?yún)?shù)可以提供例如301028292893495297L這樣超過(guò)2^52的long
值):知道了問(wèn)題的根源,修復(fù)就一目了然了,在水位保存在JSONObject對(duì)象中時(shí),應(yīng)該當(dāng)作Long型而不是String
型來(lái)保存;亦或者在讀取的時(shí)候也當(dāng)作是String型,然后通過(guò)Long.valueOf等接口進(jìn)行解析。另外,關(guān)于JSON對(duì)象中的值是Long型還是String型,其實(shí)比較容易被忽略。如果JSON對(duì)象在使用String
表示的時(shí)候,該值對(duì)應(yīng)處有引號(hào)就是String型??慈缦碌脑囉美鸵荒苛巳涣耍侯?lèi)似的問(wèn)題在網(wǎng)上隨意一搜,其實(shí)有許多人遇坑了,比如這個(gè)。所以,盡管不能說(shuō)這個(gè)庫(kù)的設(shè)計(jì)是很失敗的,但肯定不算是一個(gè)設(shè)計(jì)良好的庫(kù)。因?yàn)槟銦o(wú)法直接從API
名稱(chēng)看出其內(nèi)在的潛在邏輯,容易導(dǎo)致使用者使用不當(dāng)。因此,經(jīng)驗(yàn)教訓(xùn)就是:使用第三方庫(kù)的時(shí)候,能看API文檔就看API
文檔,切不可望文生義。當(dāng)然,這個(gè)問(wèn)題可能也僅限在Android中較老的代碼模塊,畢竟新的代碼都會(huì)使用GSON等類(lèi)庫(kù)進(jìn)行JSON
對(duì)象操作,也就不容易出現(xiàn)這樣的不易發(fā)現(xiàn)的問(wèn)題了。當(dāng)然,單就這個(gè)問(wèn)題來(lái)看,其實(shí)是在新增業(yè)務(wù)邏輯的時(shí)候,沒(méi)有正確使用JSONObject對(duì)象的接口,Long型的值不應(yīng)當(dāng)看成是String
型進(jìn)行保存而又當(dāng)成是Long型來(lái)讀取,如果保存和讀取的接口保持對(duì)應(yīng),也就不會(huì)出現(xiàn)問(wèn)題了。不管怎么說(shuō),該問(wèn)題的教訓(xùn)是在使用JSONObject
相關(guān)接口時(shí)要倍加小心謹(jǐn)慎。備注:Github上***的JSON-Java庫(kù)沒(méi)有這個(gè)問(wèn)題,可以放心使用。問(wèn)題解決知道了問(wèn)題的根源,修復(fù)就一目了然了,在水位保存在JSON對(duì)象中時(shí),應(yīng)該當(dāng)作Long型而不是String型來(lái)保存;或者在讀取的時(shí)候也當(dāng)作是
String型,然后通過(guò)Long.valueOf等接口進(jìn)行解析。感謝各位的閱讀!關(guān)于“使用JSONO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地流轉(zhuǎn)承包項(xiàng)目合作開(kāi)發(fā)投資合同范本3篇
- 2025年代理費(fèi)用協(xié)議范本
- 2025年銷(xiāo)售人員任職協(xié)議書(shū):互聯(lián)網(wǎng)銷(xiāo)售團(tuán)隊(duì)建設(shè)協(xié)議2篇
- 2025年度風(fēng)力發(fā)電場(chǎng)建設(shè)與運(yùn)營(yíng)合同范本4篇
- 二零二五年藝術(shù)品鑒定兼職人員保密責(zé)任書(shū)3篇
- 基于2025年度房產(chǎn)政策的商品房銷(xiāo)售合同
- 2025年度跨境電子商務(wù)稅收風(fēng)險(xiǎn)擔(dān)保協(xié)議4篇
- 二零二五年度直播主播與影視作品合作合同
- 2025年度供應(yīng)鏈金融貨物沖抵貨款風(fēng)險(xiǎn)控制協(xié)議
- 二零二五年度門(mén)面房房屋租賃押金合同
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- 垃圾車(chē)駕駛員聘用合同
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個(gè)人合同模板
- 八年級(jí)語(yǔ)文下冊(cè) 成語(yǔ)故事 第十五課 諱疾忌醫(yī) 第六課時(shí) 口語(yǔ)交際教案 新教版(漢語(yǔ))
- 2024年1月高考適應(yīng)性測(cè)試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- EPC項(xiàng)目采購(gòu)階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 四川2024年專(zhuān)業(yè)技術(shù)人員公需科目“數(shù)字經(jīng)濟(jì)與驅(qū)動(dòng)發(fā)展”參考答案(通用版)
- 煤炭裝卸服務(wù)合同
- 廣東省佛山市順德區(qū)2023學(xué)年中考一模物理試題(含答案解析)
評(píng)論
0/150
提交評(píng)論