使用nlohmann json库进行序列化与反序列化
- nlohmann源码仓库:https://github.com/nlohmann/json
- 使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可
- demo
#include <iostream>
#include "nlohmann/json.hpp"
#include <vector>using json = nlohmann::json;// 定义嵌套的结构体
struct Address
{std::string street;std::string city;
};// 定义包含多种数据类型和结构体数组的主结构体
struct Person
{std::string name;int age;bool isStudent;std::vector<int> grades;Address address;std::vector<Address> addresses;
};int main()
{// 创建一个Person结构体实例Person person;person.name = "John";person.age = 30;person.isStudent = false;person.grades = {90, 85, 92};person.address = {"123 Main St", "Anytown"};person.addresses = {{"456 Elm St", "Somewhere"}, {"789 Oak St", "Nowhere"}};// 序列化结构体到JSONjson jsonData = {{"name", person.name},{"age", person.age},{"isStudent", person.isStudent},{"grades", person.grades},{"address", {{"street", person.address.street}, {"city", person.address.city}}},{"addresses", json::array()}};jsonData["age"] = 20;for (const auto &addr : person.addresses){jsonData["addresses"].push_back({{"street", addr.street},{"city", addr.city}});}// 将JSON对象转换为字符串std::string jsonString = jsonData.dump(4); // 4-space indentation for pretty formatting// 打印生成的JSON字符串std::cout << "Generated JSON:" << std::endl;std::cout << jsonString << std::endl;// 反序列化JSON字符串到结构体Person parsedPerson;json parsedData = json::parse(jsonString);parsedPerson.name = parsedData["name"];parsedPerson.age = parsedData["age"];parsedPerson.isStudent = parsedData["isStudent"];std::vector<int> parsedGrades = parsedData["grades"].get<std::vector<int>>();parsedPerson.address.street = parsedData["address"]["street"];parsedPerson.address.city = parsedData["address"]["city"];parsedPerson.addresses.clear();for (const auto &addr : parsedData["addresses"]){Address parsedAddr;parsedAddr.street = addr["street"];parsedAddr.city = addr["city"];parsedPerson.addresses.push_back(parsedAddr);}// 打印反序列化后的结构体成员std::cout << "Name: " << parsedPerson.name << std::endl;std::cout << "Age: " << parsedPerson.age << std::endl;std::cout << "Is Student: " << parsedPerson.isStudent << std::endl;std::cout << "Grades: ";for (int grade : parsedPerson.grades){std::cout << grade << " ";}std::cout << std::endl;std::cout << "Address: Street: " << parsedPerson.address.street << ", City: " << parsedPerson.address.city << std::endl;std::cout << "Addresses:" << std::endl;for (const auto &addr : parsedPerson.addresses){std::cout << "Street: " << addr.street << ", City: " << addr.city << std::endl;}return 0;
}相关文章:
使用nlohmann json库进行序列化与反序列化
nlohmann源码仓库:https://github.com/nlohmann/json使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可demo #include <iostream> #include "nlohmann/json.hpp" #include <vector>using json nlohmann::js…...
高教社杯数模竞赛特辑论文篇-2012年A题:葡萄酒的评价(附获奖论文)
目录 摘 要 一、问题重述 二、问题分析 2.1 问题一的分析 2.2 问题二的分析...
手写RPC——数据序列化工具protobuf
手写RPC——数据序列化工具protobuf Protocol Buffers(protobuf)是一种用于结构化数据序列化的开源库和协议。下面是 protobuf 的一些优点和缺点: 优点: 高效的序列化和反序列化:protobuf 使用二进制编码,…...
【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发)
【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发) 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 本次研究三个内容,分别是回归预测,二分类预测和多分类预…...
Linux进程间通信的几种方式
分析&回答 管道(pipe)以及有名管道:管道可用于有亲缘关系进程间通信,有名管道克服了管道没有名字的限制,因此具有管道的所有功能之外,它还允许无亲缘关系进程间通信。信号(Signalÿ…...
Android 13.0 Launcher3定制之双层改单层(去掉抽屉式一)
1.概述 在13.0的系统产品开发中,对于在Launcher3中的抽屉模式也就是双层模式,在系统原生的Launcher3中就是双层抽屉模式的, 但是在通过抽屉上滑的模式拉出app列表页,但是在一些产品开发中,对于单层模式的Launcher3的产品模式也是常用的功能, 所以需要了解抽屉模式,然后修…...
【uniapp 配置启动页面隐私弹窗】
为什么需要配置 原因 根据工业和信息化部关于开展APP侵害用户权益专项整治要求,App提交到应用市场必须满足以下条件: 1.应用启动运行时需弹出隐私政策协议,说明应用采集用户数据 2.应用不能强制要求用户授予权限,即不能“不给权…...
2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口
很多小伙伴学习C# 的委托时往往一头雾水, 不明白委托是什么, 有什么作用, 今天我就用2分钟讲清楚 这是一个C# 的控制台程序 定义一个最简单的委托 delegate int Calculate(int a, int b); 这相当于定义了一个Calculate类型, 只不过这个类型需要传入2个int类型的参数 返回值也…...
华为云物联网平台微信小程序开发教程2.0【完整详细教程】
一、简介 在之前曾发布过一篇文章“华为云物联网平台的微信小程序开发”,在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题,在重新查看上面的文章教程时发现教程内容的步骤不详细,现对教…...
Laravel 模型1对1关联 1对多关联 多对多关联 ⑩①
作者 : SYFStrive 博客首页 : HomePage 📜: THINK PHP 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 ὄ…...
【分类】分类性能评价
评价指标 1、准确率、召回率、精确率、F-度量、ROC 属于各类的样本的并不是均一分布,甚至其出现概率相差很多个数量级,这种分类问题称为不平衡类问题。在不平衡类问题中,准确率并没有多大意义,我们需要一些别的指标。 通…...
M1 Pro 新芯片安装python2 方案汇总
前言:磨刀不误砍柴工,环境装好,才能打工。M1 Pro 新芯片安装python2 文章目录 方案一 docker 容器构造环境(如果涉及本地两个仓库需要关联则不适用)方案二 使用 pyenv 🚀 作者简介:作为某云服务…...
无涯教程-Android - Broadcast Receivers
Broadcast Receivers 仅响应来自其他应用程序或系统本身的广播消息,这些消息有时称为events或intents。例如,应用程序还可以启动广播,以使其他应用程序知道某些数据已下载到设备并可供他们使用,因此广播接收器将拦截此通信并启动适…...
【Pytorch】Tutorials个人翻译集合
本文记录Pytorch Tutorials文档的翻译文章集合. 由于本人英语能力有限(only-CET4),欢迎指正翻译中的错误。 Introduction to PyTorch 【Pytorch】Pytorch文档学习1:Tensors 【Pytorch】Pytorch文档学习2:DATASETS &a…...
WordPress(6)网站侧边栏倒计时进度小工具
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 效果图在这里插入图片描述一、添加位置二、主题style.css文件中添加美化1.引入库2.添加自定义的HTML模块效果图 提示:以下是本篇文章正文内容,下面案例可供参考 一、添加位置 在主题中 child.js…...
uniapp小程序单页面改变手机电量,头部通知的颜色效果demo(整理)
onShow(){ // 改变电池的颜色 wx.setNavigationBarColor({ frontColor: ‘#ffffff’, //只支持两种颜色 backgroundColor: ‘#ffffff’, animation: { duration: 1 } }) }...
数据挖掘导论学习笔记1(第1 、2章)
参考:https://blog.csdn.net/u013232035/article/details/48281659?spm1001.2014.3001.5506 和《数据挖掘导论》学习笔记(第1-2章)_时机性样本_schdut的博客-CSDN博客 第1章 绪论 数据挖掘是一种技术,它将传统的数据分析方法…...
从零开始,探索C语言中的字符串
字符串 1. 前言2. 预备知识2.1 字符2.2 字符数组 3. 什么是字符串4. \04.1 \0是什么4.2 \0的作用4.2.1 打印字符串4.2.2 求字符串长度 1. 前言 大家好,我是努力学习游泳的鱼。你已经学会了如何使用变量和常量,也知道了字符的概念。但是你可能还不了解由…...
Ubuntu学习---跟着绍发学linux课程记录(第二部分)
文章目录 7 文件权限7.1 文件的权限7.2 修改文件权限7.3 修改文件的属主 8、可执行脚本8.2Shell脚本8.3python脚本的创建 9Shell9.1Shell中的变量9.2 环境变量9.3用户环境变量 学习链接: Ubuntu 21.04乌班图 Linux使用教程_60集Linux课程 所有资料在 http://afanihao.cn/java …...
React18 新特性
React18 新特性 自动批量更新State 定义 import { useState } from reactconst [x, setX] useState(0)渲染赋值 setX(5)并发CM模式 同步不可中断更新机制 -> 异步可中断并行 状态更新 机制 React18 默认开启并发模式 详见代码 ReactDOM 的引入 import ReactDOM fr…...
5分钟快速上手APK Installer:Windows电脑安装Android应用的终极指南
5分钟快速上手APK Installer:Windows电脑安装Android应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行Android应用…...
DeepSeek推理服务崩溃频发?3类隐蔽内存泄漏Bug的精准捕获与48小时修复方案
更多请点击: https://kaifayun.com 第一章:DeepSeek推理服务崩溃频发?3类隐蔽内存泄漏Bug的精准捕获与48小时修复方案 典型泄漏模式识别 DeepSeek-R1/V2推理服务在高并发长周期运行中频繁OOM,经pprof火焰图与heap profile交叉分…...
深入PHY芯片:从88E1512的Loopback模式理解千兆以太网PCS/PMA/PMD分层
深入解析88E1512 PHY芯片:用环回模式透视千兆以太网物理层架构 在硬件网络调试的深水区,当常规的软件工具无法定位链路故障时,工程师需要一把能够解剖物理层数据流的"手术刀"。Marvell 88E1512这款高度集成的千兆以太网PHY芯片&…...
论文写不出学术味?高校导师推荐这几个AI论文写作工具
想写论文又快又好,关键是用对 AI 工具、走对流程——资深教授普遍推荐:千笔AI(中文全流程首选) 豆包学术版(轻量高效) DeepSeek 学术版(理工 / 长文本) Grammarly Academicÿ…...
为OpenClaw工作流配置Taotoken作为统一模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw工作流配置Taotoken作为统一模型供应商 如果你正在使用OpenClaw构建复杂的Agent工作流,管理多个Agent的模型…...
FlicFlac:3分钟学会Windows音频格式转换,让音乐随心所欲播放
FlicFlac:3分钟学会Windows音频格式转换,让音乐随心所欲播放 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为手机无法播放…...
自动驾驶汽车三维路径规划与路径跟踪控制方法【附代码】
✨ 长期致力于自动驾驶汽车、三维路径规划、路径跟踪控制、深度强化学习、预瞄跟随、模糊推理、神经网络模型预测控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 ࿰…...
Midjourney团队协作功能深度解析(仅限Beta内测成员验证的7层工作流架构)
更多请点击: https://kaifayun.com 第一章:Midjourney团队协作功能的演进逻辑与Beta内测准入机制 Midjourney自V5.2起将协作能力从“单用户提示工程”转向“多角色协同创作范式”,其核心演进逻辑围绕权限粒度、上下文继承性与资产归属治理三…...
如何在VSCode中实现高效Mermaid图表实时预览:一站式解决方案
如何在VSCode中实现高效Mermaid图表实时预览:一站式解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 还在为技术文档中的图表制作而头疼吗?你是…...
钠金属负极自校正技术:复合纸基底设计原理与工程实践
1. 项目概述:从“火中取栗”到“驯服烈马”的钠金属负极革新在电池研发领域,金属钠负极一直被视为下一代高能量密度电池的“圣杯”,其理论比容量高达1166 mAh/g,是石墨负极的近三倍,且钠资源储量丰富、成本低廉。然而&…...
