當前位置: 移動互聯網學院 > Android開發 > 常見JSON解析庫對比
常見JSON解析庫對比 時間:2017-11-27     來源:移動互聯網學院

前言

前段時間有網友針對Top500和Google Play Top200 Android應用做了全面的分析(具體分析報告見文末的參考資料),其中有涉及到對主流應用使用json框架Gson、FastJson、Jackson的統計,具體情況如下:

 

可見無論是在還是上,有很多應用會用到json框架,其中谷歌提供的gson框架是被使用得多的,老牌json框架Jackson屬于小眾,阿里出品的FastJson在的使用情況僅次于Gson,但在上卻基本沒有APP在使用。

 

測試方案

被使用得多并不代表就一定是優方案,在使用json框架的過程中,我們關注的應該是效率和易用性的問題,三種框架的具體實現各不相同,肯定會存在效率和易用性上的差異,針對這兩方面的分析網絡上的文章并沒有比較權威、能夠說服大家的觀點(FastJson引用的測試結果可以參考,但不足以說服所有人),本文結合工作中的實際情況,使用三種框架分別對bean轉String、String轉bean、List轉String、String轉List、Map轉String、String轉Map這幾種情況進行實際測試,得出在耗時、CPU占用、內存變化、易用性上的測試結果。

為了讓測試結果顯得更為可信,有必要說明一下測試方案:

使用相同的測試環境:入參相同(數據來源、測試次數)、運行的環境相同;

每個框架都使用新的版本,如果有Android定制版優先使用Android定制版(Gson:2.7、FastJson:1.1.52.android、jackson:jackson-all-1.9.9);

為了避免單次測試可能存在的不確定性因素,每個框架的每次測試都是重復測試100次,然后算平均值;

為了觀察不同量級的數據量對效率的影響,數據量可以人為設置,測試時分別從10的0次方到10的4次方,每次測試以10為倍數的增長方式(即1、10、100、1000、10000,根據實際情況,測試10萬次就顯得不是很必要了,如果數據量太大,可以考慮分多次獲取和轉換)觀察不同框架在不同量級數據的表現情況;

考慮到生成數據也會導致耗時的問題,對每個框架的每次測試,100次的測試中只生成一次數據;

考慮到測試的可操作性,對每個框架的每次測試中,bean轉String、String轉bean、List轉String、String轉List、Map轉String、String轉Map都是一并進行的,所以對內存變化和CPU變化的測試結果是這六項測試的綜合結果。

考慮到可讀性和代碼量的問題,直接提供鏈接會比貼代碼好一點:

ParseJson4Android

測試結果

詳細的測試結果如下:

Gson、FastJson、Jackson三種框架性能測試結果

 

結合本人實際操作和測試結果,可以得出如下結論:

Gson、FastJson、Jackson綜合對比

 

三種框架在實現上都使用了反射機制;

三種框架目前仍然在維護,所以從這一點來講,使用任何一個框架都是靠譜的,因為有人在維護,反饋問題可以改,遇到問題也可以問;

三種框架FastJson的包小(為了方便對比大小,均是對jar包做的統計),只有196K,其次是Gson的227K,Jackson會大很多,超過了1M;

三種框架在1000倍數據量級以內效率都很高、占用內存也低,效率高的是FastJson,內存占用都差不多;1000倍數據量級以上內存占用會很大,并且平均耗時會超過1S,FastJson表現中規中矩;

json解析、轉換是一件很耗CPU的工作;

三種框架在bean轉換為json時都有很好的易用性,但在json解析的實現上,FastJson使用起來簡單,其次是Gson;

FastJson對bean有要求,必須要有默認的構造函數,如果bean類沒有默認的構造函數并且是無法修改的(比如拿不到源碼),相比于另外兩個框架會有弱勢。

綜合上述各方面的測試結果,并結合實際工作情況來看(如果數據量很大,可以考慮分頁,多次獲取),在項目中應該優先使用FastJson框架,它在一定數據量范圍內,內存占用、效率等方面會表現得更為優秀;其次才是Gson(結合實際工作經驗,頻繁的使用json解析和轉換更應該使用FastJson)。如果有涉及到無法修改并且沒有默認構造方法的bean類,則應該優先考慮使用Gson。

特別說明:

由于測試方案、測試環境以及具體用法并不一定權威,所以測試結果僅供參考,在實際開發過程中可以借鑒本文的測試結論,但建議在任何開源項目的選型前,還是要親自動手,對性能、效率、易用性、功耗、大小、是否有人在維護、穩定性等各方面進行測試,根據綜合分析后的結果選擇適合自己項目的框架。

江苏体育彩票