2013-04-26 80 views

回答

4

映射解析JSON到Java bean包含額外的步驟,因此使用原始接口(例如Jackson的流API)將會更快。這樣,你也可以閱讀,直到有你需要的並停止解析。

響應於@sikorski
Jackson Wiki

數據綁定使用流API作爲底層JSON 讀/寫系統是建立:因此它具有高性能的[...],但相比純流/增量 處理

這是非常必然有 一些額外的開銷。如果你正在編寫一個通用的Jackson解析器,你顯然不能在其中使用自定義類型。因此,在使用泛型分析器讀取JSON之後,必須構造自定義類型,因此泛型分析器將更快。值得注意的是,這種開銷很小,幾乎從不需要優化。

+0

因此,一些庫提供了一種方法來解析SAX方式的JSON? – AdrienBrault 2013-04-26 07:20:08

+0

@AdrienBrault:是的。像傑克遜。 – 2013-04-26 07:24:27

+0

@enno Shioji請分享一些基準測試結果/統計數據或其他一些文章。 – Sikorski 2013-04-26 07:28:30

0

可以使用json-simple其高性能庫及其使用非常方便:

JSONParser parser=new JSONParser(); 

    System.out.println("=======decode======="); 

    String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]"; 
    Object obj=parser.parse(s); 
    JSONArray array=(JSONArray)obj; 
    System.out.println("======the 2nd element of array======"); 
    System.out.println(array.get(1)); 
    System.out.println(); 

    JSONObject obj2=(JSONObject)array.get(1); 
    System.out.println("======field \"1\"=========="); 
    System.out.println(obj2.get("1"));  


    s="{}"; 
    obj=parser.parse(s); 
    System.out.println(obj); 

    s="[5,]"; 
    obj=parser.parse(s); 
    System.out.println(obj); 

    s="[5,,2]"; 
    obj=parser.parse(s); 
    System.out.println(obj); 
+0

不回答我的問題。你應該再讀一遍 – AdrienBrault 2013-04-26 10:51:49

+0

@AdrienBrault:我回答了第一部分解析json,對我來說這意味着解碼它,所以也許我誤解了你的意思。 – Stephan 2013-04-26 11:05:30

4

那麼,最新的和惡最快的國家之一是文JSON。我在我的項目中使用它,並獲得了20倍的提升。我實際上感到害怕,並進行了雙重檢查,以查看庫的功能是否正確。謝天謝地,它是:) :) Boon已經建立了序列化和去序列化Java Array/Maps和Custom Beans的方法。
更多在這裏:https://github.com/RichardHightower/boon/wiki/Getting-Started

相關問題