开源JSON库Rapidjson与cJSON对比
发布日期:2021-10-03 22:59:30 浏览次数:28 分类:技术文章

本文共 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,面向过程的接口,使用不太方便

使用方式

只有头文件

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

是否支持字符串中间有'\0' \u0000结束符

支持

不支持

支持的字符编码

支持 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:架构师都需要了解的康威定律(Konway‘s Law)
下一篇:Docker Image,Container,Repository的概念理解

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月05日 08时14分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章