开源JSON库Rapidjson与cJSON对比

  • Post author:
  • Post category:其他


项目需要解析和构造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,面向过程的接口,使用不太方便

使用方式

只有头文件

虽然需要编译,但是只有两个文件

是否支持字符串中间有


'\0'








\u0000


结束符

支持

不支持

支持的字符编码

支持 UTF-8、UTF-16、UTF-32 编码,包括小端序和大端序

只支持

UTF-8

浮点数支持

支持所有浮点类型

不支持double类型

API 风格

支持SAX和DOM

只支持DOM

是否支持流操作

支持,若 JSON 存储在文件中,文件流可减少 JSON 解析及生成所需的内存量

不支持

是否支持JSON Pointer

支持

不支持

是否支持JSON Schema

校验

支持

不支持

经过上面的比较,显然RapidJson比cJSON功能上丰富很多,而且易于使用。



版权声明:本文为lclfans1983原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。