Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Json解析工具的選擇,Json解析工具選擇

Json解析工具的選擇,Json解析工具選擇

編輯:關於android開發

Json解析工具的選擇,Json解析工具選擇


前言

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


可見無論是在國內還是國際上,有很多應用會用到json框架,其中谷歌提供的gson框架是被使用得最多的,老牌json框架Jackson屬於小眾,阿裡出品的FastJson在國內的使用情況僅次於Gson,但在國際上卻基本沒有APP在使用。 (前言摘自https://zhuanlan.zhihu.com/p/21919300)     被使用得最多並不代表就一定是最優方案,在使用json框架的過程中,我們最關注的應該是效率和易用性的問題。由於本人對Jackson不太熟悉,Jackson也比較小眾,而且Jackson依賴包是三個中最大的,效率優勢不明顯,所以 我首先排除了Jackson。   1.Google的Gson(框架描述摘自http://www.cnblogs.com/kunpengit/p/4001680.html)
Gson是目前功能最全的Json解析神器,Gson當初是為因應Google公司內部需求而由Google自行研發而來,
但自從在2008年五月公開發布第一版後已被許多公司或用戶應用。
Gson的應用主要為toJson與fromJson兩個轉換函數,無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
而在使用這種對象轉換之前需先創建好對象的類型以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。
類裡面只要有get和set方法,Gson完全可以將復雜類型的json到bean或bean到json的轉換,是JSON解析的神器。
Gson在功能上面無可挑剔,但是性能上面比FastJson有所差距。
2.阿裡巴巴的FastJson
Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿裡巴巴公司開發。
無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
FastJson在復雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,導致Json轉換出錯,需要制定引用。
FastJson采用獨創的算法,將parse的速度提升到極致,超過所有json庫。   Gson、FastJson到底哪一個效率更高,速度更快?(效率比較摘自http://blog.csdn.net/zml_2015/article/details/52165317)   來個單元測試:   循環50次再求平均值:

@org.junit.Test
public void TestSpeed() throws Exception {

List<Foods> foods = foodDao.selectAll(Foods.class);

System.out.println("-------------gson-----------");
long gsonStart = System.currentTimeMillis();
gsonC(foods);//用Gson進行拆包 和 解析 並循環操作50次
long gsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (gsonEnd - gsonStart) / 50);
System.out.println("-------------gson-----------");

System.out.println("-------------FastJson-----------");
long fastStart = System.currentTimeMillis();
fastJsonC(foods);// 用FastJson進行拆包 和 解析 並循環操作50次
long fastEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (fastEnd - fastStart) / 50);
System.out.println("-------------FastJson-----------");

System.out.println("-------------JSON-----------");
long jsonStart = System.currentTimeMillis();
jsonC(foods);// 用org.json進行拆包 和 解析 並循環操作50次
long jsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (jsonEnd - jsonStart) / 50);
System.out.println("-------------JSON-----------");

}

 

調用的方法必須是 synchronized 同步的,即運行完該方法後才執行下面的代碼


private synchronized void jsonC(List<Foods> foods) throws Exception {
for (int j = 0; j < 50; j++) {
String jsonString = JsonTools.createJsonString("json", foods);
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("json");
List<Foods> list2 = new ArrayList<Foods>();
for (int i = 0; i < array.length(); i++) {

JSONObject foodObject = (JSONObject) array.get(i);
Foods foods2 = new Foods(foodObject.getInt("id"),
foodObject.getString("cookclass"),
foodObject.getString("name"),
foodObject.getString("description"),
foodObject.getString("food"),
foodObject.getString("img"),
foodObject.getString("images"),
foodObject.getString("keywords"),
foodObject.getString("message"),
foodObject.getString("url"));
list2.add(foods2);
}
String s3 = list2.toString();
}
}

private synchronized void fastJsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String fastString = FastJsonTools.createJsonString(foods);
String s2 = FastJsonTools.createJsonToListBean(fastString,
Foods.class).toString();
}
}

private synchronized void gsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String gsonString = GsonTools.createJsonString(foods);
String s1 = GsonTools.StringTolist(gsonString, Foods[].class)
.toString();
}
}

然後貼一下解析1萬條數據2萬條數據100條數據各個類庫所用的的平均時間(這個時間不包括查詢數據庫所用的時間) 1.1萬 

 

2. 2萬 

 

3.100條 

 

經過這次測試之後,確實驗證了阿裡巴巴的FastJson相對來說是挺快的。因為fastjson在復雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,導致Json轉換出錯,所以我決定還是fastjson和gson並用,

不要求效率的話就用gson,要求高效率的話就用fastjson。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved