json-print 及 json-print2
作者:gugod 發佈於:這兩周花了些時間做了串流式 JSON 美化程式。基本上是覺得 json_xs / json_pp 都需要等完整份 JSON 檔案讀 入進來才能開始解析。既然上百 MB 的 JSON 檔案已經不那麼罕見了,如果只是想排好看一些或是稍微用肉眼瀏覽 一下其內容結構,全檔解析實在是很浪費記憶體又要等很久。因此,若有個可以立刻有輸出的串流式 JSON 美化程 式,是比較符合實際的。
YAJL Tools 中已經有個 json_reformat 又快又好用。但我還是想試試看用 Perl5 來做可以做到甚麼地步。
我做了兩個版本。json-print 及 json-print2 。主要的差異在於,json-print 是依照 json.org 上 的規格去寫的,會檢查語法結構,碰到不合格的 JSON 就會停止處理。而 json-print2 則假設輸入是合格的 JSON, 只是在看到特定字符時調整前方的空白、以達到縮排的效果。
以萌典資料中的 dict-reviesd.json (72MB) 來做比較的話。大約是這樣的結果:
- cat: 0.016s
- json-print: 51.736s
- json-print2: 28.667s
- json_reformat: 0.787s
- json_pp: 114.98s
- json_xs: 2.37s
看起來 json-print2 的處理速度約是 json-print 的 1.8 倍。但以整體來說,還是完全比不上 json_xs 的處理 速度。只是不用等個兩、三秒,立刻就會看得到輸出。榜首 json_reformat 就更比不上了。
有空再來仔細推敲一下還有什麼能擠出效能的的地方沒有。