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 解析库的功能简介
链接: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 解析库的功能简介
相关文章推荐
- js阻止浏览器默认事件
- js设置和读取cookie
- JSON 解析
- JAVAScript和JAVA有区别吗
- Jackson tips: using @JsonAnyGetter/@JsonAnySetter to create "dyna beans"
- extjs-mvc开发模式
- JavaScript中解决多浏览器兼容性23个问题的快速解决方法
- 【转】图解javascript this指向什么?
- js获取不同浏览器盒子宽度高度
- 超好用的C# json转换器。类js动态使用!
- 判断数组是否包含某个元素的js函数实现方法
- 如何在QML中定义Javascript资源
- js常用
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
- JSON真的比XML好很多吗?
- 使用Chrome调试JavaScript的断点设置和调试技巧
- oc调用js方法
- OC调用js(JavaScriptCore)
- phantomjs安装使用
- JS实现点击复制功能(ZeroClipboard)