作者: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 解析库的功能简介

jsoncpp和rapidjson哪个好用?相关推荐

  1. hiredis和rapidjson库的使用小结

    Hiredis 简介 Hiredis 是Redis官方发布的C版本客户端 hiredis库.redis的源码中也有使用hiredis.比如redis-cli和Redis中的哨兵机制和主从机制,集群等都 ...

  2. android json字符串转成json对象_C++ 两行代码实现json与类对象互转

    背景与需求 之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如: class 一行代码就能将json字符串转为相应的类对象. 最近写C++需要 ...

  3. 不念过去,不畏将来,活在当下

    这个作业属于哪个课程 软件工程实践2022年春-F班 这个作业要求在哪里 软件工程实践总结&个人技术博客 这个作业的目标 课程回顾与总结.个人技术总结 其他参考文献 <构建之法> ...

  4. C++实现对Json数据的友好处理

    背景 C/C++客户端需要接收和发送JSON格式的数据到后端以实现通讯和数据交互.C++没有现成的处理JSON格式数据的接口,直接引用第三方库还是避免不了拆解拼接.考虑到此项目将会有大量JSON数据需 ...

  5. JsonCpp 入门教程

    1.JsonCpp 简介 首先说一下 JSON.JSON(JavaScript Object Notation) 基于 ECMAScript 的一个子集,是一种独立于语言的轻量级的数据交换格式,易于阅 ...

  6. rapidjson!完美的C++解析json库

    感谢开源! git上有很多解析json的库文件,比如常见的JsonCpp.cJSON等,这些都能满足正常使用.但一旦有了速度.轻量化.简便的追求,就不得不比较一下各个库的优劣了. 荡某乎上的一张各种比 ...

  7. 开源JSON库Rapidjson与cJSON对比

    项目需要解析和构造JSON格式的数据,由于项目使用C++编程,所以比较了一下基于C/C++的开源JSON解析库.当前,差不多40多种基于C/C++的开源JSON库在使用,经过一番比较,最终决定在Rap ...

  8. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson ------------- ...

  9. window环境Visual Studio配置:OpenCV,Eigen,jsoncpp

    OpenCV 一.计算机 中的配置: 在 计算机 -> 属性 -> 高级系统属性 -> 高级 -> 环境变量 -> 系统变量 -> Path 中添加: D:\Pro ...

最新文章

  1. 李飞飞:物体识别之后,计算机视觉的进展、目标和前景何在?
  2. DARPA“终身学习机器”项目取得重大进展
  3. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
  4. android - 常用知识点以及代码片段(不断更新)
  5. 深大计算机系有金工实习吗,金工实习报告答案深圳大学拿A答案(精选).pdf
  6. PHP包管理器PEAR 中爆多个缺陷可发动供应链攻击,已潜伏15年
  7. ajax跨域请求 html5,HTML5中使用postMessage实现Ajax跨域请求的方法
  8. 用Nginx作反向代理简单多了
  9. PAT甲题题解-1010. Radix (25)-二分搜索
  10. linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务
  11. java 镶嵌创建线程_请教一个 Java 多线程嵌套使用的问题
  12. 阿里副总裁玄难:藏经阁计划首次在阿里应用落地
  13. 电脑桌面壁纸的尺寸分类
  14. OS X 修改网卡 Mac 地址的方法
  15. 云南开放大学《机械制造基础-形考作业1-6(主观题)》
  16. Android系统简介
  17. 冰丝凉席好不好 冰丝凉席怎样 冰丝凉席简介
  18. 电影《名侦探柯南:万圣节的新娘》观后感
  19. TI-RTOS学习笔记(三)—— 驱动程序框架
  20. 中国流量排名前一百名网站

热门文章

  1. MapReduce-Reduce端join操作-Map阶段代码
  2. 上传文件漏洞防御手段
  3. Nginx_负载均衡配置讲解
  4. mysql5.58_mysql5.58编译安装手记
  5. php 删除硬链接,为什么要用软链接硬链接
  6. NOP (code)_NOP指令作用及解析
  7. dos进入/退出某文件夹
  8. 手把手讲解 Android Hook入门Demo
  9. 【20181102T2】飞越行星带【智商题+最小瓶颈路】
  10. 极客班C++ STL(容器)第二周笔记