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