[Json框架選型]Android開發中應該使用哪一種主流json框架?
前言
前段時間@寒江不釣同學針對國內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。
特別說明:
由於測試方案、測試環境以及具體用法並不一定權威,所以測試結果僅供參考,在實際開發過程中可以借鑒本文的測試結論,但建議在任何開源項目的選型前,還是要親自動手,對性能、效率、易用性、功耗、大小、是否有人在維護、穩定性等各方面進行測試,根據綜合分析後的結果選擇最適合自己項目的框架。
參考資料
測試Demo
gson
FastJson Android版本
Jackson
FastJson 使用詳解
gson使用詳解
Google Play Top200 應用分析報告
國內Top500Android應用分析報告
Android系列---JSON數據解析
介紹 JSON
更多原創文章和優質資源請關注公眾號:
公眾號:open_dev
更多Android技術資源交流請加群「Android技術資源交流群」,本群的建群宗旨是分享優質的Android技術資源。群成員可以自由分享任何Android方面的技術資源和文章,並會不定期總結成文章方便大家閱讀。群已滿,請加群助理微信:Jf-1994,並註明原因是加Android技術資源交流群
推薦閱讀:
※關於miui植入廣告的問題,大家都是怎麼發現的?
※鎚子手機的整容臉和羅永浩的自我救贖:M1系列會被市場認可嗎?
※Android 手機在 Mac OS X 下如何連接?
※對於開發者來說,Android 的開發者選項里有哪些實用的功能?
※Android Retrofit 2.0 使用-補充篇