web-dev-qa-db-ja.com

C ++用の最速のJSONリーダー/ライター

C++ JSONパーサーとライターが必要です。速度と信頼性は非常に重要です。インターフェイスがNiceであるかどうか、Boostベースであるかどうか、Cパーサーであっても問題ありません(C++のものよりもかなり速い場合)。

誰かが利用可能なJSONパーサーの速度の経験がある場合は、アドバイスしてください。

48
user424060

http://lloyd.github.com/yajl/

http://www.digip.org/jansson/

速度を比較する方法は実際にはわかりませんが、最初の方法は、一度に小さなチャンクのみを解析するため、すべてのデータを保持する必要がないため、本当に大きなJSONデータにスケーリングするための正しいアイデアのように見えます一度にメモリ(これは、ライブラリ/ユースケースに応じて高速または低速になる可能性があります)

10
Spudd86

rapidjson は、高速で小さなメモリフットプリントになるように設計されたC++ JSONパーサー/ジェネレーターです。

パフォーマンス比較 があり、YAJLとJsonCPPがあります。


更新:

オープンソースプロジェクト ネイティブJSONベンチマーク を作成しました。これは、適合性とパフォーマンスの観点から29(および増加中)C/C++ JSONライブラリを評価します。これは便利なリファレンスになるはずです。

78
Milo Yip

https://github.com/quartzjer/js0n

可能な限りUいインターフェースですが、あなたが求めることを行います。ゼロ割り当て。

http://zserge.com/jsmn.html 別のゼロ割り当てアプローチ。

上記のソリューションはすべて動的なメモリ割り当てを行うため、データ構造に応じて、ある時点で必然的に遅くなり、組み込みシステムのようなヒープが制約された環境に含めるのは危険です。

ここにvjson、rapidjson、sajsonのベンチマーク: http://chadaustin.me/2013/01/json-parser-benchmarking/ 興味があるならそのようなこと。

そして、質問の「作家」の部分に答えるために、私はあなたが効率的な

printf("{%s:%s}",name,value)

任意のライブラリを使用した実装-printf/sprintf実装自体がもちろん軽量であると仮定します。

編集:実際にそれを取り戻させてください、RapidJsonはMemoryPoolAllocatorを介してのみスタック上の割り当てを許可し、実際にこれをGenericReaderのデフォルトにします。私は比較をしていませんが、ここにリストされている他のものよりも堅牢であると期待しています。また、依存関係はなく、例外をスローしないため、おそらく最終的に組み込みに適しています。完全にヘッダーベースのライブラリなので、どこにでも簡単に組み込むことができます。

6
kert