JSON--rapidjson介绍

article/2025/10/4 8:34:18

JSON--rapidjson

  • 1 RapidJSON简介
  • 2 C/C++ Json库对比
    • 一致性
    • 解析时间
    • 解析内存
    • Stringify Time(string 2 json)
    • Prettify Time(美化格式时间)
    • 代码大小
  • 3 几个重点库介绍
    • rapidjson
    • nlohmann-json
    • jsoncpp
    • cjson
  • 参考

1 RapidJSON简介

  • RapidJSON是腾讯开源的一个高效的C++ JSON解析器及生成器,它是只有头文件的C++库。
  • RapidJSON是跨平台的,支持Windows, Linux, Mac OS X及iOS, Android。
  • RapidJSON很小但很完整。它同时支持SAX和DOM风格的API。SAX解析器只有5000行代码。
  • RapidJSON快。它的性能可以与strlen()相媲美。它还可选择支持SSE2/SSE4.2加速。
  • RapidJSON是自包含的,只包含头文件。它不依赖于诸如BOOST之类的外部库。它甚至不依赖于STL。
  • RapidJSON是友好的存储器。对于大多数32/64位机器(不包括文本字符串),每个JSON值占用16个字节。默认情况下,它使用快速内存分配器,解析器在解析期间紧凑地分配内存。
    RapidJSON Unicode-friendly。它支持UTF-8、UTF-16、UTF-32 (LE和BE)以及它们的内部检测、验证和转码。例如,您可以读取一个UTF-8文件,并让RapidJSON在DOM中将JSON字符串转码为UTF-16。它还支持代理和“u0000”(空字符)。

2 C/C++ Json库对比

一致性

在这里插入图片描述

解析时间

在这里插入图片描述

解析内存

在这里插入图片描述

Stringify Time(string 2 json)

在这里插入图片描述

Prettify Time(美化格式时间)

在这里插入图片描述

代码大小

在这里插入图片描述

3 几个重点库介绍

rapidjson

这个库的设计目标就是追求性能极致,性能确实相较其他库高很多,但是缺点是接口设计不友好。rapidjson为了追求高性能,在设计上尽量减少内存复制,大量使用指针和浅复制,所以很多接口的用法都不太符合常规。实际使用种可以自己再封装一层接口,用起来会更顺手。

nlohmann-json

这个库好像就叫json for modern c++,使用c++11实现。官方文档已经说明,它不是为了追求性能而设计的,其目的是使得在c++里面操作json尽可能的自然,就像在python等语言里面操作json一样。它的接口易用,只要会用std::vector和std::map就能用这个库。

jsoncpp

这个库的接口比较好用,如果在程序只是用于处理配置文件等对性能没要求的场景,可以考虑使用这个库。

cjson

一个用c实现的json库,效率也比较高,但是使用起来要用c的那一套方法,最好的方式也是自己再封装一下。

参考

1、RapidJSON
2、C++ Json库对比
3、the conformance and performance of 41 open-source C/C++ libraries with JSON parsing/generation capabilities. Performance means speed, memory, and code size.
4、rapidjson库的基本使用
5、RapidJSON简介及使用


http://chatgpt.dhexx.cn/article/jfdwLwHa.shtml

相关文章

RapidJSON入门:手把手教入门实例介绍

RapidJSON优点 跨平台 编译器:Visual Studio、gcc、clang 等 架构:x86、x64、ARM 等 操作系统:Windows、Mac OS X、Linux、iOS、Android 等 容易安装 只有头文件的库。只需把头文件复制至你的项目中。 独立、最小依赖 不需依赖 STL、BOOST …

oracle listagg如何去重

listagg去重 去重思路:利用listagg会忽略null值的特点 按ENTITY_GROUP_RRN 分组,用 listagg 分别合并 EQPT_ID 与 STATION_ID ,同时要求去重 表 T_TEST 数据如下: EQPT_IDENTITY_GROUP_RRNSTATION_IDTOOL-00110493721JITAI-1TO…

mysql listagg within_Oracle的 listagg() WITHIN GROUP ()函数使用

1.使用条件查询 查询部门为20的员工列表 -- 查询部门为20的员工列表 SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO 20 ; 效果: 2.使用 listagg() WITHIN GROUP () 将多行合并成一行 SELECT T .DEPTNO, listagg (T .ENAME, ,) WITHIN GROUP (ORDER …

listagg结果去重

最近在一个项目中用到了listagg方法,但是在组合结果中出现有重复的情况。默认的结果如下 于是我就写了一个方法对listagg的结果去重,也可以对该格式的字符串去重,方法如下 create or replace function listaggpure(targetStr varchar2,seper…

Oracle函数之listagg函数

语法 有点难以看懂,个人理解listagg是list aggregate的缩写(错了勿喷),也就是列表总计,聚合的意思。 官方文档解释为: LISTAGG orders data within each group specified in the ORDER BY clause and then …

listagg()行转列函数

--基础数据 DROP TABLE "ZYH_TEST"; CREATE TABLE "ZYH_TEST" ("ID" NUMBER(19) NOT NULL ,"NAME" VARCHAR2(255 BYTE) ,"CREATETIME" DATE ,"SCORE" NUMBER ,"CLASSID" VARCHAR2(255 BYTE) )INSERT I…

oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)

oracle11g开始支持的listagg函数替代了wmconcat来实现行列转换的功能。 listagg函数的用法: oracle行列转换例子: —建表https://www.cndba.cn/foucus/article/3929https://www.cndba.cn/foucus/article/3929 SQL> create table b (id number,name varchar2(20)); Table c…

mysql listagg函数_SQLSERVER中的ListAGG

跃然一笑 MySQLSELECT FieldA , GROUP_CONCAT(FieldB ORDER BY FieldB SEPARATOR ,) AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;Oracle&DB2SELECT FieldA , LISTAGG(FieldB, ,) WITHIN GROUP (ORDER BY FieldB) AS FieldBs FROM TableName GRO…

mysql listagg within_Oracle函数之LISTAGG

最近在学习的过程中,发现一个挺有意思的Oracle函数,它可实现对列值的拼接。下面我们来看看其具体用法。 最近在学习的过程中,发现一个挺有意思的Oracle函数,它可实现对列值的拼接。下面我们来看看其具体用法。 用法: 对…

listagg

1.创建数据表,准备测试数据 CREATE TABLE MK_STUDENT(ID NUMBER(18) NOT NULL,STU_NAME VARCHAR2(200),STU_SCORE VARCHAR2(50),PRIMARY KEY (ID) ); ALTER TABLE MK_STUDENT ADD KEMU VARCHAR2(200);INSERT INTO MK_STUDENT (ID,STU_NAME,STU_SCORE,KEMU) VALUES …

listagg( )详解

想象一个场景,现实生活中一个人有许多手机号已是常态,数据库中也会有类似的结构。 大家肯定想知道listagg()有什么样的效果: 案列分析 一个表中有许多数据,名字叫张三的有许多手机号。希望查询结果出来是分组且清晰。 select …

Oracle列转行函数 Listagg()详解

详解 listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩、致密化(data densification) 基本用法 像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来 LISTAGG(XXX,XXX) WI…

Oracle 中 LISTAGG 函数的介绍以及使用

LISTAGG 函数介绍 listagg 函数是 Oracle 11.2 推出的新特性。 其主要功能类似于 wmsys.wm_concat 函数, 即将数据分组后, 把指定列的数据再通过指定符号合并。LISTAGG 使用 listagg 函数有两个参数:1、 要合并的列名2、 自定义连接符号☆L…

矩阵乘以其矩阵转置求导-数学

20210703 矩阵论 https://zhuanlan.zhihu.com/p/288541909?utm_sourcewechat_session 矩阵运算法则 20210529 https://blog.csdn.net/Lisa_Ren_123/article/details/81983785 矩阵转置求导 https://jingyan.baidu.com/article/da1091fb69f0b7027849d612.html

matlab中怎么求矩阵的转置

第一步我们首先需要知道matlab中矩阵后面加单引号是共轭转置,加点和单引号是转置,如下图所示: matlab中怎么求矩阵的转置 第二步在matlab命令行窗口中输入“ A[1 2 4;5 6 7]”,如下图所示: matlab中怎么求矩阵的转…

矩阵的转置等于矩阵的逆

http://zhidao.baidu.com/question/334500638.html 百度知道三个回答 矩阵A的转置矩阵A^T等于A的逆矩阵A^-1 那么AA^TAA^-1E 设A(α1,α2,α3,...,αn)^T,其中αi为n维列向量, 那么A^T(α1,α2&…

矩阵转置运算简单总结

矩阵转置的运算规律: (1); (2); (3); (4); (5)

矩阵的转置

稀疏矩阵: 当一个矩阵中的很多元素都是零,而且非零元素的分布没有规律时,该矩阵称为稀疏矩阵。 稀疏矩阵的压缩存储方法: 从稀疏矩阵的概念,我们可以知道,稀疏矩阵的大多元素都是零。所以,我们只…