幾種常見的JSON解析器比較
原創(chuàng)??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??
大家好! 我是來自深圳技術(shù)大學(xué)FSR實(shí)驗(yàn)室的同學(xué),標(biāo)題FFH就是FSRlab For Harmony!并且我也正在參加OpenHarmony成長計(jì)劃從論文到開源提交研究,以后我們也會(huì)陸續(xù)在這個(gè)社區(qū)記錄學(xué)習(xí)心得和體會(huì)。
參考文獻(xiàn)
Spatial Data Monitoring and Mobile Applications – Comparison of Methods
for Parsing JSON in Android Operating System
引言
上一篇文章簡單地講了為什么XML會(huì)逐漸被JSON取代,接下來這篇文章,我們來看一下國外幾種常見JSON解析器的比較,分別是Gson,AndroidJson,JSON.simple,JSON.smart, Jackson .以下分析大部分來自上面的參考文獻(xiàn),該論文主要討論在Android操作系統(tǒng)上不同解析器處理移動(dòng)設(shè)備JSON格式的問題。
Gson
第一種解析方法稱為Gson,來自com.google.gson.stream.JsonReaderpackage,是由Google團(tuán)隊(duì)為Java開發(fā)的,
AndroidJson
第二種方法稱為AndroidJson,使用谷歌直接提供的解析庫,是Android SDK的一部分。與其他方法不同,無需將其他庫編譯到最終應(yīng)用程序中。然而缺點(diǎn)是在與服務(wù)器建立通信時(shí),下載的數(shù)據(jù)位于InputStream類對象中,這一步需要將數(shù)據(jù)轉(zhuǎn)換為字符串類對象。因此對于大數(shù)據(jù)量的解析,性能要求會(huì)很高。
JSON.simple
JSON.simple用的是JSON.simple庫,是基于堆的方法解析數(shù)據(jù)的。
JSON.smart
JSON.smart從代碼結(jié)構(gòu)上看和JSON.simple很相似,不同的是,JSON.smart是以性能為驅(qū)動(dòng)。
Jackson
Jackson用的是Jackson JSON Processor庫
場景介紹
該場景在不同的安卓設(shè)備上分別對10, 50, 100, 200, 500, 1000 和 5000 量級的空間數(shù)據(jù)進(jìn)行解析,以下圖表的X軸是數(shù)據(jù)量,Y軸是不同解析庫消耗的時(shí)間. Graph1-3提供了在單個(gè)設(shè)備上解析所需的測量時(shí)間。所有值均以毫秒為單位提供。對每個(gè)設(shè)備進(jìn)行十次適當(dāng)?shù)臏y量,然后從測量值中獲得平均值。
結(jié)論
在圖表上測試的數(shù)據(jù)來看,很明顯,對于大型數(shù)據(jù)解析,使用Jackson 是最有利的方法。但是這種方法不適用于小型數(shù)據(jù)的解析,小型的數(shù)據(jù)量選擇Gson性能可能會(huì)更佳。
fastJson和Jackson
這里我也想提一下國內(nèi)阿里大神溫少憑一己之力撐起的fastJson,這個(gè)庫以“快”出名,在國內(nèi)有人使用,但是在國外大部分項(xiàng)目依然選擇Jackson,這又是為什么呢?
因?yàn)橹挥衒astJson一個(gè)人負(fù)責(zé),而像Jackson這些庫是由一個(gè)團(tuán)隊(duì)負(fù)責(zé)的,所以一個(gè)人的團(tuán)隊(duì)開發(fā)的庫可以比一個(gè)團(tuán)隊(duì)開發(fā)的還有性能優(yōu)勢,可以想到是走了些捷徑,這些捷徑就是在fastJson中寫死了一些代碼,導(dǎo)致擴(kuò)展性不高,犧牲了java某些應(yīng)該兼容的特性,以達(dá)到了所謂的快,其代碼質(zhì)量相較國外的庫是比較差的。
所以fastJson之所以沒在國際上流行起來,最主要的原因應(yīng)該是開發(fā)者的思路全放到快上去了,而偏離了標(biāo)準(zhǔn)及功能性,質(zhì)量也不夠好,有點(diǎn)“舍本逐末"的味道,并且沒有英文文檔,這樣就更沒法指望老外用了。
而Jackson的拓展性很高。各種奇葩需求都能得到滿足,開源代碼質(zhì)量也比較高,開源項(xiàng)目社區(qū)的運(yùn)營也比較好。
參考文獻(xiàn)
Spatial Data Monitoring and Mobile Applications – Comparison of Methods
for Parsing JSON in Android Operating System
https://www.zhihu.com/question/44199956
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??