C++ Json库对比

最近在开发一个程序时遇到性能瓶颈,经过排查后发现整个程序耗时最多的一段处理逻辑是对Json对象的序列化。我在代码中使用了Jsoncpp库,通过网上资料看了关于Jsoncpp的介绍,其特点是接口设计得比较好,应用比较多,但是性能方面并不突出。为了解决问题,我决定换一个性能高的库,所以对比分析了几个常见的开源库。

C++ Json库测评

github有一个关于C++ Json库的测评 – https://github.com/miloyip/nativejson-benchmark,该项目比较了40多个库的性能。

rapidjson

这个库的设计目标就是追求性能极致,性能确实相较其他库高很多,但是缺点是接口设计不友好。rapidjson为了追求高性能,在设计上尽量减少内存复制,大量使用指针和浅复制,所以很多接口的用法都不太符合常规。实际使用种可以自己再封装一层接口,用起来会更顺手。

https://github.com/Tencent/rapidjson/

nlohmann-json

这个库好像就叫json for modern c++,使用c++11实现。官方文档已经说明,它不是为了追求性能而设计的,其目的是使得在c++里面操作json尽可能的自然,就像在python等语言里面操作json一样。它的接口易用,只要会用std::vector和std::map就能用这个库。

https://github.com/nlohmann/json

jsoncpp

这个库的接口比较好用,如果在程序只是用于处理配置文件等对性能没要求的场景,可以考虑使用这个库。

cjson

一个用c实现的json库,效率也比较高,但是使用起来要用c的那一套方法,最好的方式也是自己再封装一下。

总结

在开发过程中,如果对处理json的性能要求不高,或者使用不频繁,不是程序的瓶颈所在,比如配置文件解析这类场景,可以使用接口是设计较为友好的库,比如jsoncpp、nlohmann-json等;如果对性能要求很高,就可以考虑rapidjson这类库了。