项目需要解析和构造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多个库的信息。这里列出它们的简要信息:
|
|
|
|
|
|
||
|
|
||
|
|
|
|
|
|||
|
|
||
|
|
|
|
|
|||
|
|
||
|
|
||
|
|
|
|
|
|||
|
|
||
|
|||
|
|
||
|
|
||
|
|
||
|
|
|
|
|
|
||
|
|
||
|
|||
|
|
||
|
|
|
|
|
|
||
|
|||
|
|
||
|
|||
|
|
||
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|||
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
||
|
|||
|
|
|
|
|
|
||
|
|
||
|
|
|
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比较
|
|
|
github |
https://github.com/Tencent/rapidjson |
https://github.com/DaveGamble/cJSON |
Star数量 |
10.7K |
5.6K |
语言及接口 |
C++,提供面向对象接口,使用方便 |
C,面向过程的接口,使用不太方便 |
使用方式 |
只有头文件 |
虽然需要编译,但是只有两个文件 |
是否支持字符串中间有 |
支持 |
不支持 |
支持的字符编码 |
支持 UTF-8、UTF-16、UTF-32 编码,包括小端序和大端序 |
只支持 |
浮点数支持 |
支持所有浮点类型 |
不支持double类型 |
API 风格 |
支持SAX和DOM |
只支持DOM |
是否支持流操作 |
支持,若 JSON 存储在文件中,文件流可减少 JSON 解析及生成所需的内存量 |
不支持 |
是否支持JSON Pointer |
支持 |
不支持 |
是否支持JSON Schema |
支持 |
不支持 |
经过上面的比较,显然RapidJson比cJSON功能上丰富很多,而且易于使用。