【C++】开源:rapidjson数据解析库配置与使用

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍rapidjson数据解析库配置与使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明
      • 解析json数据示例:
      • 写入json数据示例:
      • 从文件中解析json
      • 将json数据写入文件

😏1. 项目介绍

项目Github地址:https://github.com/Tencent/rapidjson

RapidJSON 是一个快速的 C++ JSON 解析器/生成器,具有高效的内存利用和低延迟。它是一个轻量级的、模块化的、功能齐全的 JSON 库,广泛应用于 C++ 程序中用于处理 JSON 数据。

RapidJSON 的特点包括:

1.快速高效:RapidJSON 通过最大程度地优化内存使用和计算效率来实现快速的 JSON 解析和生成,它在性能上表现出色。

2.标准兼容:RapidJSON 完全符合 JSON 标准(RFC 8259),可以处理各种合法的 JSON 数据。

3.模块化设计:RapidJSON 的设计非常模块化,允许用户根据自己的需求选择性地使用特定的功能模块,从而减少了库的大小和依赖关系。

4.可扩展性:RapidJSON 支持用户自定义分配器来管理内存分配,也支持自定义解析错误处理策略,使其在不同的应用场景下具有很好的灵活性。

5.跨平台:RapidJSON 可以在各种操作系统和编译器上运行,包括 Windows、Linux、macOS 等。

RapidJSON 提供了简单易用的 API,使得解析和生成 JSON 数据变得非常便捷。通过 RapidJSON,你可以轻松地在 C++ 程序中处理 JSON 数据,包括解析 JSON 字符串和构建 JSON 对象。

😊2. 环境配置

下面进行环境配置:

# apt安装
sudo apt install rapidjson-dev
# g++编译不用加 -l

😆3. 使用说明

下面进行使用分析:

解析json数据示例:

#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"int main() {const char* json = R"({"name": "John","age": 30,"isStudent": true,"scores": [85, 90, 88]})";rapidjson::Document document;document.Parse(json);if (document.IsObject()) {// 提取字符串类型数据std::string name = document["name"].GetString();std::cout << "Name: " << name << std::endl;// 提取整数类型数据int age = document["age"].GetInt();std::cout << "Age: " << age << std::endl;// 提取布尔类型数据bool isStudent = document["isStudent"].GetBool();std::cout << "Is Student: " << (isStudent ? "true" : "false") << std::endl;// 提取数组类型数据const rapidjson::Value& scores = document["scores"];if (scores.IsArray()) {std::cout << "Scores: ";for (rapidjson::SizeType i = 0; i < scores.Size(); i++) {std::cout << scores[i].GetInt() << " ";}std::cout << std::endl;}}return 0;
}

写入json数据示例:

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>int main() {rapidjson::Document document;document.SetObject();// 添加字符串类型数据rapidjson::Value name;name.SetString("John", document.GetAllocator());document.AddMember("name", name, document.GetAllocator());// 添加整数类型数据rapidjson::Value age;age.SetInt(30);document.AddMember("age", age, document.GetAllocator());// 添加布尔类型数据rapidjson::Value isStudent;isStudent.SetBool(true);document.AddMember("isStudent", isStudent, document.GetAllocator());// 添加数组类型数据rapidjson::Value scores(rapidjson::kArrayType);scores.PushBack(85, document.GetAllocator());scores.PushBack(90, document.GetAllocator());scores.PushBack(88, document.GetAllocator());document.AddMember("scores", scores, document.GetAllocator());// 将 Document 对象序列化成 JSON 字符串rapidjson::StringBuffer buffer;rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);document.Accept(writer);// 输出 JSON 字符串std::cout << buffer.GetString() << std::endl;return 0;
}

从文件中解析json

#include "rapidjson/document.h"
#include "rapidjson/filereadstream.h"
#include <cstdio>
#include <iostream>int main() {// 打开 JSON 文件FILE* fp = fopen("data.json", "r");if (fp == nullptr) {std::cerr << "Failed to open input.json" << std::endl;return 1;}// 读取文件内容char readBuffer[65536];rapidjson::FileReadStream is(fp, readBuffer, sizeof(readBuffer));// 创建 RapidJSON 解析器rapidjson::Document document;document.ParseStream(is);// 关闭文件fclose(fp);// 检查解析是否成功if (document.HasParseError()) {std::cerr << "JSON parse error: " << rapidjson::GetParseErrorFunc(document.GetParseError()) << std::endl;return 1;}// 访问和处理 JSON 数据if (document.IsObject()) {const rapidjson::Value& name = document["name"];const rapidjson::Value& age = document["age"];const rapidjson::Value& isStudent = document["isStudent"];std::cout << "Name: " << name.GetString() << std::endl;std::cout << "Age: " << age.GetInt() << std::endl;std::cout << "Is Student: " << (isStudent.GetBool() ? "Yes" : "No") << std::endl;} else {std::cerr << "JSON is not an object" << std::endl;return 1;}return 0;
}

将json数据写入文件

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include <fstream>int main() {rapidjson::Document document;document.SetObject();// 添加字符串类型数据rapidjson::Value name;name.SetString("John", document.GetAllocator());document.AddMember("name", name, document.GetAllocator());// 添加整数类型数据rapidjson::Value age;age.SetInt(30);document.AddMember("age", age, document.GetAllocator());// 添加布尔类型数据rapidjson::Value isStudent;isStudent.SetBool(true);document.AddMember("isStudent", isStudent, document.GetAllocator());// 将 Document 对象序列化成 JSON 字符串rapidjson::StringBuffer buffer;rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);document.Accept(writer);// 将 JSON 字符串写入文件std::ofstream outputFile("output.json");if (outputFile.is_open()) {outputFile << buffer.GetString();outputFile.close();std::cout << "JSON data has been written to output.json" << std::endl;} else {std::cerr << "Failed to open output.json for writing" << std::endl;}return 0;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知&#xff0c;魔方财务现在官方售价299&#xff0c;那么接下来就是带来开心版&#xff0c;详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布&#xff01;

MySQL索引事务存储引擎

索引&#xff1a;是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

数据结构 - 全貌总结

目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的&#xff0c;但是我们可以使用指针等道具&#xff0c;构造出类似“树形”等复杂结构。 数…

java项目之宠物管理系统(ssm框架)

项目简介 宠物管理系统实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理。前台首页…

使用 Rust 进行程序

首先&#xff0c;我们需要安装必要的库。在终端中运行以下命令来安装 scraper 和 reqwest 库&#xff1a; rust cargo install scraper reqwest 然后&#xff0c;我们可以开始编写程序。以下是一个基本的爬虫程序&#xff0c;用于爬取 上的图片&#xff1a; rust use reqwe…

Pinia 是什么?Redux、Vuex、Pinia 的区别?

结论先行&#xff1a; Pinia 是 Vue 官方团队开发的一个全新状态管理库。与 Redux、Vuex 相同&#xff0c;核心都是解决组件间的通信和数据的共享问题。 Pinia 和 Vuex 类似&#xff0c;但使用起来更加简单和直观。因为 Pinia 基于 Vue3 的 Composition 组合式 API 风格&…

金豺算法优化VMD参数,六种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵、包络谱峰值因子...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期采用金豺优化算法(Golden Jackal optimization, GJO)优化VMD参数。选取六种适应度函数进行优化&#xff0c;以此确定VMD的最佳k和α参数。6种适应度函数分别是&#xff1a;最…

初识JVM

1. JVM内存区域划分 jvm在启动的时候&#xff0c;会申请到一整个很大的内存区域。整个一大块区域&#xff0c;不太好用。为了更方便使用&#xff0c;把整个区域隔成了很多区域&#xff0c;每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

【广州华锐互动】影视制作VR在线学习:身临其境,提高学习效率

随着科技的不断发展&#xff0c;影视后期制作技术也在日新月异。然而&#xff0c;传统的教学方式往往难以满足学员的学习需求&#xff0c;无法充分展现影视后期制作的魅力和潜力。近年来&#xff0c;虚拟现实(VR)技术的崛起为教学领域带来了新的机遇。通过VR教学课件&#xff0…

超详细Linux搭建Hadoop集群

一、给计算机集群起别名——互通 总纲&#xff1a; 1、准备3台客户机&#xff08;关闭防火墙、静态IP、主机名称都设置好&#xff09; 2、安装JDK&#xff08;可点击&#xff09; 3、配置环境变量 4、安装Hadoop 5、配置hadoop的环境变量 6、配置集群 7、群起测试 1.1、环境准备…

蓝鹏测控平台软件 智能制造生产线的大脑

测控软件平台&#xff0c;是由包括底层驱动程序、通讯协议等&#xff0c;集数据采集、自动反馈控制、信息分析以及多种工程应用于一体的一种电子信息处理平台。 蓝鹏测控软件平台目前支持各种文本标签 、数字标签&#xff1b;支持趋势图、波动图、缺陷图及统计图表。多端口实现…

MCU常见通信总线串讲(一)—— UART和USART

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图&#xff0c;错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…

Lyapunov function 李雅普诺夫函数

文章目录 正文定义对定义中出现的术语的进一步讨论 Basic Lyapunov theorems for autonomous systems 自治系统的基本李雅普诺夫定理Locally asymptotically stable equilibrium 局部渐近稳定平衡Stable equilibrium 稳定平衡Globally asymptotically stable equilibrium 全局渐…

计算机毕业设计java+vue+springboot的论坛信息网站

项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观&#xff0c;平面的东西。程序开发也好理解就是功能实现。而前端开发&#xff0c;简单来说&#xff0c;就是把平面效果图转换成网页&#xff0c;把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

IDEA取消git对项目的版本控制

前言 前几天新建项目的时候不小心选了个git仓库&#xff0c;导致这个测试项目一直被git管理着。 解决办法 1 右键项目 选择打开资源目录 2 删除.git文件 把目录下的.git文件删掉 3 删除idea中的git管理 删除完.git文件后&#xff0c;进入idea&#xff0c;右下角会有这样的提…

广域网加速的作用:企业为什么需要广域网加速?

由于局域网与广域网之间巨大的带宽鸿沟&#xff0c;通过增加带宽来满足膨胀的流量需求是不切实际的。 并且广域网带宽成本较高&#xff0c;增加广域网带宽对任何企业都意味着巨大的成本负担。这些使得控制 管理广域网带宽使用成为必需。 企业为什么要加速广域网? 对重要的企…

轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/PrimitiveEntityTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见&#xff1a;引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔…