您的位置:首页 > Web前端 > JavaScript

jsoncpp和rapidjson哪个好用?

2016-05-19 12:07 861 查看
作者:Milo Yip

链接:http://www.zhihu.com/question/23654513/answer/46157616

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

身为 RapidJSON 作者,刚刚做完 28 个 C/C++ JSON 库(包括题目中的两个)的评测

miloyip/nativejson-benchmark,回来回答这个问题。

标准符合程度(越高越好):

<img src="https://pic3.zhimg.com/0824ee0557ff57fbcdbc98b82477f30a_b.jpg" data-rawwidth="900" data-rawheight="810" class="origin_image zh-lightbox-thumb" width="900" data-original="https://pic3.zhimg.com/0824ee0557ff57fbcdbc98b82477f30a_r.jpg">这个测试分开4个部分:JSON正确性检测(使用

这个测试分开4个部分:JSON正确性检测(使用JSON_checker测试集)、解析double的准确性、解析string的正确性、roundtrip测试。

JsonCpp 得88分,算是比较好的了。如果仔细看每个部分(https://rawgit.com/miloyip/nativejson-benchmark/master/sample/conformance.html),就是JSON正确性和roundtrip上有几个问题。而RapidJSON在JSON正确性、string和roundtrip上都是满分,开启了
full precision 选项的话,解析double也是满分。

解析和生成JSON的耗时(越低越好):

<img src="https://pic2.zhimg.com/d995b8cfc3249d112fa9142e3d5e7101_b.jpg" data-rawwidth="900" data-rawheight="833" class="origin_image zh-lightbox-thumb" width="900" data-original="https://pic2.zhimg.com/d995b8cfc3249d112fa9142e3d5e7101_r.jpg">

<img
src="https://pic4.zhimg.com/70e06ed8e2625bc4d4ba4aec1fda1973_b.jpg" data-rawwidth="900" data-rawheight="765" class="origin_image zh-lightbox-thumb" width="900" data-original="https://pic4.zhimg.com/70e06ed8e2625bc4d4ba4aec1fda1973_r.jpg">可见RapidJSON比JsonCpp在解析上快了一个数量级,而生成上也近一个数量级了。

可见RapidJSON比JsonCpp在解析上快了一个数量级,而生成上也近一个数量级了。

解析至DOM后的内存用量(越低越好):

<img src="https://pic4.zhimg.com/9b0bdc335161513ab69b7b43de24c6cb_b.jpg" data-rawwidth="900" data-rawheight="833" class="origin_image zh-lightbox-thumb" width="900" data-original="https://pic4.zhimg.com/9b0bdc335161513ab69b7b43de24c6cb_r.jpg">RapidJSON(除了insitu
parsing)的内存用量只是JsonCpp的1/4。

RapidJSON(除了insitu parsing)的内存用量只是JsonCpp的1/4。

其他方面,例如功能、文档、友好性等,就不在此逐一对比了。

RapidJSON也有一些缺点,例如有些API的设计比较奇怪,可能较难使用。我们会尝试加入一些功能,使不太注重性能的部分能更容易使用。

如果读者仍然想使用 JsonCpp,也可以参考这个评测,帮助改进它。这也是我做此评测的初衷,在开源代码中互相学习,持续改进。

编辑于 2015-04-2834
条评论感谢

分享
 

收藏没有帮助举报
作者保留权利

收起

0赞同
反对,不会显示你的姓名



朱元

rapidjson 大量借鉴了rapidxml的一些特点,虽然不是一个作者。于是rapidxml是xml解析库速度最高的,rapidjson也基本上说的上是json解析中最快的了。
rapidjson 大量借鉴了rapidxml的一些特点,虽然不是一个作者。

于是rapidxml是xml解析库速度最高的,rapidjson也基本上说的上是json解析中最快的了。

发布于 2015-04-28添加评论感谢

分享
 

收藏没有帮助举报
作者保留权利

0赞同
反对,不会显示你的姓名



汪周洋

rapidjson接口设计的不好,不好用,虽然只需要包含头文件,另外主要也是用了其他内建json类型的语言给惯坏了,jsoncpp要编译成库就更加不方便了
rapidjson接口设计的不好,不好用,虽然只需要包含头文件,另外主要也是用了其他内建json类型的语言给惯坏了,jsoncpp要编译成库就更加不方便了

编辑于 2015-12-032
条评论感谢

分享
 

收藏没有帮助举报
作者保留权利

6赞同
反对,不会显示你的姓名



周刚,凡是过去
皆为序章
李宇、知乎用户、战龙
等人赞同

没人回答,我来回答一下吧,之前都用jsoncpp,自从发现rapidjson后,一直让团队用这个易用性:rapidjson是全头文件包含的,jsoncpp需要你内置编译或编译成库;但rapidjson的一些接口不全,只提供了一层一层的这种解析方式,不能将某一层一次读出来,实际用…显示全部
没人回答,我来回答一下吧,之前都用jsoncpp,自从发现rapidjson后,一直让团队用这个

易用性:rapidjson是全头文件包含的,jsoncpp需要你内置编译或编译成库;但rapidjson的一些接口不全,只提供了一层一层的这种解析方式,不能将某一层一次读出来,实际用的时候,要简单封装一下,不然代码量会很大;

性能:rapidjson的性能是现在所有的c++ json解析库里面最高的,没有之一;

容错性:rapidjson只支持标准的 json 格式,很多人以为这个是缺点,我觉得这个是优点,大家都按照标准做,这是成本最低的;

rapidjson之前是托管在Googe Code上的,现在已迁移到GitHub,地址:miloyip/rapidjson · GitHub

另外具体的性能测试,可以参考这个地址:mloskot/json_benchmark · GitHub

这是对流行C++ Json库的一个总结:【总结】各种 JSON 解析库的功能简介
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: