项目需要解析和构造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. django 链接地址匹配流程
  2. 【Joomla】K2 Item 页面添加 Module
  3. 阿里暴跌近6%,蒸发2400亿!拼多多火了,股价暴涨近15%!这个幕后的程序员开挂了,马云,刘强东都怕!...
  4. 模拟浏览器自动化测试工具Selenium之四cssSelector元素定位开发篇
  5. 一道经典的JavaScript面试题
  6. 宝塔apache mysql_商淘多商户商城系统部署之宝塔面板(Nginx/Apache+MySQL+PHP7.1)
  7. android.mk 优化编译,android下ndk编译c优化
  8. java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考
  9. 【12c】OCP 062近期新出现的考试原题-第28题
  10. 新手如何入门学习前端?
  11. Java高并发编程实战5,异步注解@Async自定义线程池
  12. 使用prettier统一编码风格
  13. 一篇文章带您秒懂地理标志商标注册
  14. 各个城市对应的code码
  15. centos 如何想windows样快速打五笔
  16. redis - quorum的解释
  17. vb.net如何查询电脑麦克风收到声音_拔掉 MacBook,用 8GB 树莓派来办公的体验如何?...
  18. fone出席CXO智库峰会,分享“老板需要什么样的全面预算?”
  19. 小编亲测:开售即遭“疯抢”的小度在家凭什么成了网红?
  20. 走进游戏中的美术:游戏美术风格介绍

热门文章

  1. umi修改浏览器上方图标2种方法
  2. 微软杯大学生计算机大赛,Imagine Cup 微软“创新杯”全球学生科技大赛
  3. MySQL保存计算结果_数据库保存计算结果 fluent计算完成后怎么保存
  4. 谁说程序员薪资高?她在上海工作了五年,却连20元以上的外卖都不敢点!
  5. 早安心语/2017-6-28
  6. 微信小程序—使用npm(第三方包)
  7. 华为机试---火眼金睛
  8. js string转两位小数_js保留两位小数
  9. Gdal开发环境搭建(Java)
  10. 前端开发工作提炼亮点