C++ Json库的使用

1.Json库的使用,包含C++ Json的创建、读写、字符串Json互转等,覆盖日常使用场景

  • 前提:按照参考的文章部署好nlohmann/json

  • 上代码
#include <iostream>
#include <fstream>
#include "nlohmann/json.hpp"
using json = nlohmann::json;
using namespace std;void CreateVoidJson(json& j)
{j["pi"] = 3.141;j["happy"] = true;j["name"] = "Niels";j["nothing"] = nullptr;j["answer"]["everything"] = 42; // 初始化answer对象j["list"] = { 1, 0, 2 }; // 使用列表初始化的方法对"list"数组初始化j["object"] = { {"currency", "USD"}, {"value", 42.99} }; // 初始化object对象cout << "-------------------------------  创建Json END  -------------------------------------------\n" << endl;
}void PrintJsonInfo(json& j)
{float pi = j.at("pi");string name = j.at("name");int everything = j.at("answer").at("everything");cout << pi << endl; // 输出: 3.141cout << name << endl; // 输出: Nielscout << everything << endl; // 输出: 42// 打印"list"数组for (int i = 0; i < 3; i++)cout << j.at("list").at(i) << endl;// 打印"object"对象中的元素cout << j.at("object").at("currency") << endl; // 输出: USDcout << j.at("object").at("value") << endl; // 输出: 42.99cout << "-------------------------------  输出Json信息END  -------------------------------------------\n" << endl;
}void OutputJson(json& j)
{ofstream file("Out.json");file << j << endl;cout << "\n-------------------------------  导出Json END  -------------------------------------------\n" << endl;
}void JsonSwtichCString(json& j)
{//重载写法,返回一个Json对象j = "{\"happy\":true,\"pi\":3.141}"_json;auto j2 = R"({"happy":true,"pi":3.141})"_json;//或者string s = "{\"happy\":true,\"pi\":3.141}";auto j1 = json::parse(s.c_str());cout << j1.at("pi") << endl; // 输出:3.141//dump()返回 JSON 对象中存储的原始 string 值。s = j1.dump();cout << "dump()返回 JSON 对象中存储的原始 string 值:" << s << endl;cout << "-------------------------------  Json字符串互转 END  -------------------------------------------\n" << endl;
}void ReadJsonFile()
{ifstream i("Out.json");json j;i >> j;// 以易于查看的方式将json对象写入到本地文件ofstream o("Out1.json");o << std::setw(4) << j << endl;cout << "-------------------------------  读入Json END  -------------------------------------------\n" << endl;
}void JsonSwapType()
{// 首先定义一个结构体struct person{std::string name;std::string address;int age;};person p = { "Ned Flanders", "744 Evergreen Terrace", 60 }; // 定义初始化p// 从结构体转换到json对象json j;j["name"] = p.name;j["address"] = p.address;j["age"] = p.age;// 从json对象转换到结构体person p1{j["name"].get<std::string>(),j["address"].get<std::string>(),j["age"].get<int>()};cout << "-------------------------------  转换Json到结构体 END  -------------------------------------------" << endl;
}int main()
{// 首先创建一个空的json对象json j; CreateVoidJson(j);//打印Json信息PrintJsonInfo(j);//输出Json文件OutputJson(j);//Json对象和C字符串相互转换,最长使用的场景JsonSwtichCString(j);// 读取一个json文件,nlohmann会自动解析其中数据ReadJsonFile();//任意类型转换JsonSwapType();return 0;
}
  •  输出
-------------------------------  创建Json END  -------------------------------------------3.141
Niels
42
1
0
2
"USD"
42.99
-------------------------------  输出Json信息END  --------------------------------------------------------------------------  导出Json END  -------------------------------------------3.141
dump()返回 JSON 对象中存储的原始 string 值:{"happy":true,"pi":3.141}
-------------------------------  Json字符串互转 END  --------------------------------------------------------------------------  读入Json END  --------------------------------------------------------------------------  转换Json到结构体 END  -------------------------------------------

参考的文章:nlohmann入门使用总结

2.多层级Json读取

  • 多层级Json举例
{"output": {"width": 720,"height": 1080,"frameRate": 20,"crf": 31},"tracks": [{"name": "t1","pieces": [{"file": "x.mp4","startTime": 2,"endTime": 6},{"file": "y.mp4","startTime": 9,"endTime": 13}]},{"name": "t2","pieces": [{"file": "z.mp4","startTime": 0,"endTime": 10}]}]
}
  • C++代码解析
#include "nlohmann/json.hpp"
#include <fstream>
#include <iostream>using json = nlohmann::json;int main() {json j;std::ifstream jfile("test.json");jfile >> j;// 打印output对象【也可以用j["output"].at("width")】std::cout << j.at("output").at("width") << std::endl;std::cout << j.at("output").at("height") << std::endl;std::cout << j.at("output").at("frameRate") << std::endl;std::cout << j.at("output").at("crf") << std::endl;// 打印tracks数组对象for(int i=0; i<j["tracks"].size(); i++) {std::cout << j["tracks"][i].at("name") << std::endl;// 打印pieces子数组对象json j2 = j["tracks"][i].at("pieces");for(int k=0; k<j2.size(); k++) {std::cout << j2[k].at("file") << std::endl;std::cout << j2[k].at("startTime") << std::endl;std::cout << j2[k].at("endTime") << std::endl;}}return 0;
}

注:此部分代码参考1中的文章

3.推荐和参考:

rapidjson

  • RapidJSON: 首页
  • GitHub - Tencent/rapidjson: A fast JSON parser/generator for C++ with both SAX/DOM style API

 nlohmann/json

  • GitHub - nlohmann/json: JSON for Modern C++
  • nlohmann入门使用总结

 

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

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

相关文章

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路&#xff1a; 一、项目背景 二、功能分析 查询功能流程图&#xff1a; 管理功能流程图&#xff1a; 三、设计 四、实现 代码实现&#xff1a; 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树&#xff08;打印&#xff09; 建立右兄弟…

TDC-GP30 Data Sheet

4 特殊服务功能 4.1 看门狗 系统复位后,GP30的看门狗功能被启用。大约13秒后,如果看门狗计时器在此之前未被清除,则看门狗会重置芯片。这通常由固件使用clrwtd命令完成,以便在固件因任何原因未清除看门狗时,系统会发生复位。看门狗时间基于一个未稳定的10 kHz内部振荡器时…

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码&#xff1a;项目源码 解压项目源码到本地 打开IDEA 左上角&#xff1a;文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件&#xff0c;点击确定&#xff0c;根据图示步骤继续导入项目 查看项目目录&#xff…

基于单片机的指纹密码锁

【摘要】 本设计是一款基于单片机的指纹识别电子密码锁系统。该系统以STC89C52单片机作为模块核心同时结合ZFM-60指纹模块实现录取指纹并存储指纹数据的功能&#xff0c;并且通过HS12864-15C液晶显示比对流程及比对结果&#xff0c;该指纹电子密码锁通过直流继电器与发光二极管…

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程&#xff0c;但太费劲了&#xff0c;这里有个非常简便的好方法&#xff0c;分享给大家。 1. 导入QXlsx库 转载链接 &#xff1a;https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…

QT + Opencv 实现灰度模板匹配

QT Opencv 实现灰度模板匹配 实现思路 1.模板创建代码思路 1 初始化和准备&#xff1a; 使用 cv::buildPyramid 函数构建图像金字塔。图像金字塔是一种多分辨率表示&#xff0c;每个层级的图像分辨率逐步降低。 调整 m_TemplData 的大小以匹配图像金字塔的层级数。 计算每…

深度学习知识点:LSTM

文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&#xff0c;很容易出现梯度爆炸或者梯度消失的问…

git提交

基本流程&#xff1a;新建分支 → 分支上开发(写代码) → 提交 → 合并到主分支 拉取最新代码因为当前在 master 分支下&#xff0c;你必须拉取最新代码&#xff0c;保证当前代码与线上同步&#xff08;最新&#xff09;&#xff0c;执行以下命令&#xff1a;bashgit pull orig…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

基于 JavaEE 的影视创作论坛

在当今数字化时代&#xff0c;影视创作论坛成为了影视爱好者们交流与分享的重要平台。本文将详细介绍基于 JavaEE 的影视创作论坛的设计与实现&#xff0c;让大家了解其背后的技术奥秘。 文末附有完整项目代码 该论坛具备丰富的功能&#xff0c;包括首页推荐、用户管理、影片管…

系统思考—因果关系

果的背后是因&#xff0c;因的背后是系统&#xff1a;我们遇到的每个结果&#xff0c;无论是企业的业绩问题&#xff0c;团队的效率问题&#xff0c;还是个人的情绪问题&#xff0c;都源于我们日积月累种下的因。这些因可能是错误的习惯、僵化的制度、还是短视的决策。 改变系…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境。如还未配置安装Maven的&#xff0c;请先下载安装。如何下载安装&#xff0c;可参考我另外篇文章&#xff1a;maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

django基于Python的电影推荐系统

Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序&#xff0c;旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息&#xff08;如类型…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…

python类和对象

一、什么是类和对象 类和对象一般是编程中较早接触到的比较抽象的概念&#xff0c;其实我们只要按照我们现实生活的实例去类比&#xff0c;就很好理解了 概念理解 我们可以把类比做是一个盖房子的图纸&#xff0c;对象比做是根据图纸去创建出来的一栋房子&#xff0c;这样每…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库&#xff0c;一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想&#xff0c;它将对象的创建和对象之间的依赖关系…

CNN Test Data

由于数据量过大&#xff0c;打不开了 搞一组小的吧。收工睡觉 https://download.csdn.net/download/spencer_tseng/90256048