项目需要解析和构造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功能上丰富很多,而且易于使用。

开源JSON库Rapidjson与cJSON对比相关推荐

  1. 教程-delphi的开源json库:superobject,用法简介

    困惑一天的问题 一个语句搞定了... 回头细说. superobject中的{$DEFINE UNICODE} 就是它,这是json官方推荐的Delphi处理json的包,地址: http://www ...

  2. .NET平台开源JSON库LitJSON的使用方法

    一个简单示例: String str = "{'name':'cyf','id':10,'items':[{'itemid':1001,'itemname':'hello'},{'itemi ...

  3. c# 对象json互相转换_Go语言进阶之路(六):内置JSON库和开源库gjson

    Go语言内置了部分JSON函数,可以方便地在Go语言结构体实例和JSON字符串之间互相转换.这可比Java强多了. 不过Go语言内置的json库功能比较鸡肋,只能在结构体和JSON之间相互转换,没办法 ...

  4. go JSON库调研

    0 概述 go json库的序列化.反序列化性能,api可用性对比调研. go版本:go1.20 1.encoding/json go原生标准库,对go数据结构的json格式转换有很好的支持,但通过反 ...

  5. 开源 C++ JSON 库 sonic-cpp解析性能为 rapidjson 的 2.5 倍

    sonic-cpp 是由字节跳动 STE 团队和服务框架团队共同研发的一款面向 C++ 语言的高效 JSON 库,极致地利用当前 CPU 硬件特性与向量化编程,大幅提高了序列化反序列化性能,解析性能为 ...

  6. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

  7. 绝了,几款主流的 JSON 库性能对比!

    本篇通过JMH(Oracle官方测试框架)来测试一下Java中几种常见的JSON解析库的性能.每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才 ...

  8. 几种常用 JSON 库性能比较

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 原文:www.xncoding.com/2018/01/09/java/jsons.html ...

  9. JAVA中几种常用JSON库性能比较

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...

最新文章

  1. windows批处理的感叹号和变量延迟扩展
  2. 单片机拼字程序怎么做_小程序商城怎么做?做一个小程序需要多少钱
  3. java partialfunction,scala中方法和函数的区别
  4. 25个恶意JavaScript 库通过NPM官方包仓库分发
  5. IDEA中项目引入独立包打包失败问题解决(找不到包)
  6. Java编写飞机大战(超级详细的完整版)--附源码及图片
  7. linux运行asm文件,linux – 尝试在Ubuntu上的NASM上运行.asm文件时出错
  8. linux数据库可视化工具_适用于Linux的数据可视化工具
  9. 运维工程师平均月工资是多少?
  10. kinect java_Kinect for Java
  11. 计算机软件系统故障的分类,系统故障
  12. 捕获iOS模拟器视频以进行App预览
  13. html中怎么做扇形菜单,纯CSS3实现扇形动画菜单(简化版)实例源码
  14. 2022/10/10-10/15周报
  15. Android源码目录结构详解(转载)
  16. 联想小新+Windows10+Ubuntu18.04双系统安装+引导设置过程全记录
  17. IBinder对象在进程间传递的形式(二)
  18. vivox50支持鸿蒙,vivoX50pro—好马配好鞍,强大的微云台相机
  19. 在visual studio中出现Error spawning的原因及解决思路
  20. PandoraBox运行Xware(迅雷远程下载)的试验

热门文章

  1. python字符串输入小圆点_心理学实验程序编程(python)
  2. 4月英语学习——走在路上
  3. 服务端指南 | 良好的 API 设计指南
  4. 移动平台的产品设计世界
  5. 设计模式之Factory工厂模式
  6. 突击Mercurial SCM(HG)13---回退到指定版本
  7. FFMPEG+SDL2 实现播放器功能
  8. 基于微信小程序的美容预约系统-计算机毕业设计
  9. 数据库查询的数据分组方法
  10. 执行未来计划每日打卡