用于C++的最快的JSON读/写器

use*_*060 49 c c++ json

我需要一个C++ JSON解析器和编写器.速度和可靠性非常关键,我不关心界面是否好看,如果它是基于Boost的,甚至C解析器都没问题(如果它比C++快得多).

如果有人对可用的JSON解析器的速度有经验,请指教.

Mil*_*Yip 82

rapidjson是一个C++ JSON解析器/生成器,旨在实现快速和小内存占用.

与YAJL和JsonCPP 进行性能比较.


更新:

我创建了一个开源项目Native JSON基准测试,它在一致性和性能方面评估了29个(并且不断增加的)C/C++ JSON库.这应该是一个有用的参考.

  • 谢谢!现在我从JsonCpp的7秒多解析时间到1.5373. (2认同)
  • @dalle就像更新一样,`setjmp`已被删除了几年.无论如何,谢谢你的评论. (2认同)

Spu*_*d86 10

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

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

真的不知道他们如何比较速度,但第一个看起来像是缩放到非常大的JSON数据的正确想法,因为它一次只解析一小块,所以他们不需要保存所有数据内存一次(根据库/用例,可以更快或更慢)


ker*_*ert 6

https://github.com/quartzjer/js0n

最丑的界面可能,但你做的是什么.零分配.

http://zserge.com/jsmn.html 另一种零分配方法.

上面发布的解决方案都是动态内存分配,因此在某些时候将不可避免地最终变慢,这取决于数据结构 - 并且包含在像嵌入式系统这样的堆约束环境中将是危险的.

这里有vjson,rapidjson和sajson的基准:http://chadaustin.me/2013/01/json-parser-benchmarking/ 如果你对这类事情感兴趣的话.

并回答你的"作家"问题的一部分,我怀疑你可以打败一个有效的

printf("{%s:%s}",name,value)
Run Code Online (Sandbox Code Playgroud)

使用任何库实现 - 假设你的printf/sprintf实现本身就是轻量级的.

编辑:实际上让我回过头来看,RapidJson只允许通过其MemoryPoolAllocator进行堆栈分配,并实际上将其作为其GenericReader的默认值.我还没有完成比较,但我希望它比这里列出的任何其他东西更强大.它也没有任何依赖关系,并且它不会抛出异常,这可能使它最终适合嵌入式.完全基于头的lib,因此易于包含在任何地方.