开源JSON库Rapidjson与cJSON对比
项目需要解析和构造JSON格式的数据,由于项目使用C++编程,所以比较了一下基于C/C++的开源JSON解析库。当前,差不多40多种基于C/C++的开源JSON库在使用,经过一番比较,最终决定在RapidJson和cJSON中选择一个。下面是对这两个库的一个比较详细的对比。
1 C/C++ JSON库列表
Github上的项目nativejson-benchmark(https://github.com/miloyip/nativejson-benchmark)从性能和对JSON标准的支持程度两个维度对40多种基于C/C++的开源JSON库进行了benchmark对比。同时也列出了这40多个库的信息。这里列出它们的简要信息:
Library |
Language |
Version |
Notes |
ArduinoJson |
C++ |
5.6.6 |
|
CAJUN |
C++ |
2.0.3 |
|
C++ REST SDK |
C++11 |
v2.8.0 |
Need Boost on non-Windows platform. DOM strings must be UTF16 on Windows and UTF8 on non-Windows platform. |
ccan/json |
C |
||
cJSON |
C |
1.5.0 |
|
Configuru |
C++ |
2015-12-18 |
gcc/clang only |
dropbox/json11 |
C++11 |
||
Facil.io |
C |
0.5.3 |
|
FastJson |
C++ |
Not parsing number per se, so do it as post-process. |
|
folly |
C++11 |
2016.08.29.00 |
Need installation |
gason |
C++11 |
||
jansson |
C |
v2.7 |
|
jeayeson |
C++14 |
||
json-c |
C |
0.12.1 |
|
jsoncons |
C++11 |
0.97.1 |
|
json-voorhees |
C++ |
v1.1.1 |
|
json spirit |
C++ |
4.08 |
Need Boost |
Json Box |
C++ |
0.6.2 |
|
JsonCpp |
C++ |
1.0.0 |
|
hjiang/JSON++ |
C++ |
||
jsmn |
C |
Not parsing number per se, so do it as post-process. |
|
jvar |
C++ |
v1.0.0 |
gcc/clang only |
Jzon |
C++ |
v2-1 |
|
nbsdx/SimpleJSON |
C++11 |
||
Nlohmann/json |
C++11 |
v2.0.3 |
|
parson |
C |
||
picojson |
C++ |
1.3.0 |
|
pjson |
C |
No numbers parsing, no DOM interface |
|
POCO |
C++ |
1.7.5 |
Need installation |
qajson4c |
C |
1.0.0 |
gcc/clang only |
Qt |
C++ |
5.6.1-1 |
Need installation |
RapidJSON |
C++ |
v1.1.0 |
There are four configurations: RapidJSON (default), RapidJSON_AutoUTF (transcoding any UTF JSON), RapidJSON_Insitu (insitu parsing) & RapidJSON_FullPrec (full precision number parsing) |
sajson |
C++ |
||
SimpleJSON |
C++ |
||
sheredom/json.h |
C |
Not parsing number per se, so do it as post-process. |
|
udp/json |
C |
1.1.0 |
Actually 2 libraries: udp/json-parser & udp/json-builder. |
taocpp/json |
C++11 |
1.0.0-beta.7 |
Uses PEGTL for parsing |
tunnuz/JSON++ |
C++ |
||
ujson |
C++ |
2015-04-12 |
|
ujson4c |
C |
||
V8 |
C++ |
5.1.281.47 |
Need installation |
vincenthz/libjson |
C |
0.8 |
|
YAJL |
C |
2.1.0 |
|
ULib |
C++ |
v1.4.2 |
Need building: (./configure --disable-shared && make) |
2 Benchmark比较
详细的数据可以参见https://github.com/miloyip/nativejson-benchmark/tree/master/sample
下面从对JSON标准的支持程度,内存占用,执行时间,库的大小几个维度进行了benchmark比较。
2.1 对JSON标准的支持程度
下图是各个开源库对JSON标准的支持程度的benchmark数据, 数值越大越好。
2.2 解析JSON内存使用情况对比
2.3 解析JSON使用时间对比
2.4 生成JSON使用时间对比
2.5 修改JSON使用时间对比
2.6 代码量大小对比
2.7总结
从以上比较可以看出,RapidJson除了代码量上占绝对优势为,其他方面都是绝对的领先。
3 RapidJson和cJSON比较
比较项目 |
RapidJson |
cJSON |
github |
https://github.com/Tencent/rapidjson |
https://github.com/DaveGamble/cJSON |
Star数量 |
10.7K |
5.6K |
语言及接口 |
C++,提供面向对象接口,使用方便 |
C,面向过程的接口,使用不太方便 |
使用方式 |
只有头文件 |
虽然需要编译,但是只有两个文件 |
是否支持字符串中间有 |
支持 |
不支持 |
支持的字符编码 |
支持 UTF-8、UTF-16、UTF-32 编码,包括小端序和大端序 |
只支持UTF-8 |
浮点数支持 |
支持所有浮点类型 |
不支持double类型 |
API 风格 |
支持SAX和DOM |
只支持DOM |
是否支持流操作 |
支持,若 JSON 存储在文件中,文件流可减少 JSON 解析及生成所需的内存量 |
不支持 |
是否支持JSON Pointer |
支持 |
不支持 |
是否支持JSON Schema校验 |
支持 |
不支持 |
经过上面的比较,显然RapidJson比cJSON功能上丰富很多,而且易于使用。
开源JSON库Rapidjson与cJSON对比相关推荐
- 教程-delphi的开源json库:superobject,用法简介
困惑一天的问题 一个语句搞定了... 回头细说. superobject中的{$DEFINE UNICODE} 就是它,这是json官方推荐的Delphi处理json的包,地址: http://www ...
- .NET平台开源JSON库LitJSON的使用方法
一个简单示例: String str = "{'name':'cyf','id':10,'items':[{'itemid':1001,'itemname':'hello'},{'itemi ...
- c# 对象json互相转换_Go语言进阶之路(六):内置JSON库和开源库gjson
Go语言内置了部分JSON函数,可以方便地在Go语言结构体实例和JSON字符串之间互相转换.这可比Java强多了. 不过Go语言内置的json库功能比较鸡肋,只能在结构体和JSON之间相互转换,没办法 ...
- go JSON库调研
0 概述 go json库的序列化.反序列化性能,api可用性对比调研. go版本:go1.20 1.encoding/json go原生标准库,对go数据结构的json格式转换有很好的支持,但通过反 ...
- 开源 C++ JSON 库 sonic-cpp解析性能为 rapidjson 的 2.5 倍
sonic-cpp 是由字节跳动 STE 团队和服务框架团队共同研发的一款面向 C++ 语言的高效 JSON 库,极致地利用当前 CPU 硬件特性与向量化编程,大幅提高了序列化反序列化性能,解析性能为 ...
- opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...
" 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...
- 绝了,几款主流的 JSON 库性能对比!
本篇通过JMH(Oracle官方测试框架)来测试一下Java中几种常见的JSON解析库的性能.每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才 ...
- 几种常用 JSON 库性能比较
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 原文:www.xncoding.com/2018/01/09/java/jsons.html ...
- JAVA中几种常用JSON库性能比较
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...
最新文章
- django 链接地址匹配流程
- 【Joomla】K2 Item 页面添加 Module
- 阿里暴跌近6%,蒸发2400亿!拼多多火了,股价暴涨近15%!这个幕后的程序员开挂了,马云,刘强东都怕!...
- 模拟浏览器自动化测试工具Selenium之四cssSelector元素定位开发篇
- 一道经典的JavaScript面试题
- 宝塔apache mysql_商淘多商户商城系统部署之宝塔面板(Nginx/Apache+MySQL+PHP7.1)
- android.mk 优化编译,android下ndk编译c优化
- java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考
- 【12c】OCP 062近期新出现的考试原题-第28题
- 新手如何入门学习前端?
- Java高并发编程实战5,异步注解@Async自定义线程池
- 使用prettier统一编码风格
- 一篇文章带您秒懂地理标志商标注册
- 各个城市对应的code码
- centos 如何想windows样快速打五笔
- redis - quorum的解释
- vb.net如何查询电脑麦克风收到声音_拔掉 MacBook,用 8GB 树莓派来办公的体验如何?...
- fone出席CXO智库峰会,分享“老板需要什么样的全面预算?”
- 小编亲测:开售即遭“疯抢”的小度在家凭什么成了网红?
- 走进游戏中的美术:游戏美术风格介绍