本文共 2150 字,大约阅读时间需要 7 分钟。
项目需要解析和构造JSON格式的数据,由于项目使用C++编程,所以比较了一下基于C/C++的开源JSON解析库。当前,差不多40多种基于C/C++的开源JSON库在使用,经过一番比较,最终决定在RapidJson和cJSON中选择一个。下面是对这两个库的一个比较详细的对比。
1 C/C++ JSON库列表
Github上的项目nativejson-benchmark()从性能和对JSON标准的支持程度两个维度对40多种基于C/C++的开源JSON库进行了benchmark对比。同时也列出了这40多个库的信息。这里列出它们的简要信息:
Library | Language | Version | Notes |
| C++ | 5.6.6 | |
| C++ | 2.0.3 | |
| C++11 | v2.8.0 | Need Boost on non-Windows platform. DOM strings must be UTF16 on Windows and UTF8 on non-Windows platform. |
| C | ||
| C | 1.5.0 | |
| C++ | 2015-12-18 | gcc/clang only |
| C++11 | ||
| C | 0.5.3 | |
| C++ | Not parsing number per se, so do it as post-process. | |
| C++11 | 2016.08.29.00 | Need installation |
| C++11 | ||
| C | v2.7 | |
| C++14 | ||
| C | 0.12.1 | |
| C++11 | 0.97.1 | |
| C++ | v1.1.1 | |
| C++ | 4.08 | Need Boost |
| C++ | 0.6.2 | |
| C++ | 1.0.0 | |
| C++ | ||
| C | Not parsing number per se, so do it as post-process. | |
| C++ | v1.0.0 | gcc/clang only |
| C++ | v2-1 | |
| C++11 | ||
| C++11 | v2.0.3 | |
| C | ||
| C++ | 1.3.0 | |
| C | No numbers parsing, no DOM interface | |
| C++ | 1.7.5 | Need installation |
| C | 1.0.0 | gcc/clang only |
| C++ | 5.6.1-1 | Need installation |
| 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) |
| C++ | ||
| C++ | ||
| C | Not parsing number per se, so do it as post-process. | |
udp/json | C | 1.1.0 | Actually 2 libraries: & . |
| C++11 | 1.0.0-beta.7 | Uses for parsing |
| C++ | ||
| C++ | 2015-04-12 | |
| C | ||
| C++ | 5.1.281.47 | Need installation |
| C | 0.8 | |
| C | 2.1.0 | |
| C++ | v1.4.2 | Need building: (./configure --disable-shared && make) |
2 Benchmark比较
详细的数据可以参见
下面从对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功能上丰富很多,而且易于使用。
转载地址:https://blog.csdn.net/lclfans1983/article/details/115202250 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!