我需要一个C ++ JSON解析器&作家。速度和可靠性是非常关键的,我不关心界面是否好看,如果它是基于Boost的,甚至C解析器都没问题(如果它比C ++快得多)。
如果有人对可用的JSON解析器的速度有所了解,请提供建议。
答案 0 :(得分:74)
rapidjson是一个C ++ JSON解析器/生成器,旨在实现快速和小内存占用。
YAJL和JsonCPP有一个performance comparison。
更新
我创建了一个开源项目Native JSON benchmark,它在一致性和性能方面评估了29个(并且不断增加的)C / C ++ JSON库。这应该是一个有用的参考。
答案 1 :(得分:9)
不知道他们如何比较速度,但第一个看起来像是缩放到非常大的JSON数据的正确想法,因为它一次只解析一小块,所以他们不需要全部内存中的数据一次(这可能更快或更慢,具体取决于库/用例)
答案 2 :(得分: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)
使用任何库实现 - 假设你的printf / sprintf实现本身就是轻量级的。
编辑:实际上让我回过头来看,RapidJson只允许通过其MemoryPoolAllocator进行堆栈分配,并实际上将其作为GenericReader的默认值。我还没有完成比较,但我希望它比这里列出的任何其他东西更强大。它也没有任何依赖关系,并且它不会抛出异常,这可能使它最终适合嵌入式。完全基于头的lib,因此很容易包含在任何地方。