cpp struct json相互转换

devtools/2024/10/18 22:29:52/
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-atom-one-dark">

使用nlohmann的库

“安装”

把include下载到本地可以include的位置

demo

需要再class="tags" href="/STRUCT.html" title=struct>struct和class中实现to_class="tags" href="/JSON.html" title=json>json()和from_class="tags" href="/JSON.html" title=json>json()函数。

貌似cpp20可以通过反射无需手动编写to_class="tags" href="/JSON.html" title=json>json()和from_class="tags" href="/JSON.html" title=json>json(),这里不做展开

class="prism language-cpp">class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><iostream>
class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string">"nlohmann/class="tags" href="/JSON.html" title=json>json.hpp"class="token keyword">using nlohmannclass="token double-colon punctuation">::class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">;class="token keyword">class="tags" href="/STRUCT.html" title=struct>struct class="token class-name">Dog class="token punctuation">{stdclass="token double-colon punctuation">::string Nameclass="token punctuation">;class="token comment">// to_class="tags" href="/JSON.html" title=json>json 和 from_class="tags" href="/JSON.html" title=json>json 需要在同一命名空间下class="token keyword">void class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{jclass="token punctuation">[class="token string">"Name"class="token punctuation">] class="token operator">= Nameclass="token punctuation">;class="token punctuation">}class="token keyword">void class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="token keyword">const class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Name"class="token punctuation">)class="token punctuation">.class="token function">get_toclass="token punctuation">(Nameclass="token punctuation">)class="token punctuation">;class="token punctuation">}
class="token punctuation">}class="token punctuation">;class="token keyword">class="tags" href="/STRUCT.html" title=struct>struct class="token class-name">Phone class="token punctuation">{stdclass="token double-colon punctuation">::string Ptypeclass="token punctuation">;class="token keyword">int Pnumclass="token punctuation">;class="token comment">// to_class="tags" href="/JSON.html" title=json>json 和 from_class="tags" href="/JSON.html" title=json>json 需要在同一命名空间下class="token keyword">void class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{j class="token operator">= class="token punctuation">{class="token punctuation">{class="token string">"Ptype"class="token punctuation">, Ptypeclass="token punctuation">}class="token punctuation">,class="token punctuation">{class="token string">"Pnum"class="token punctuation">,Pnumclass="token punctuation">}class="token punctuation">}class="token punctuation">;class="token punctuation">}class="token keyword">void class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="token keyword">const class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Ptype"class="token punctuation">)class="token punctuation">.class="token function">get_toclass="token punctuation">(Ptypeclass="token punctuation">)class="token punctuation">;jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Pnum"class="token punctuation">)class="token punctuation">.class="token function">get_toclass="token punctuation">(Pnumclass="token punctuation">)class="token punctuation">;class="token punctuation">}
class="token punctuation">}class="token punctuation">;class="token keyword">class="tags" href="/STRUCT.html" title=struct>struct class="token class-name">User class="token punctuation">{stdclass="token double-colon punctuation">::string Nameclass="token punctuation">;class="token keyword">int Ageclass="token punctuation">;stdclass="token double-colon punctuation">::mapclass="token operator"><stdclass="token double-colon punctuation">::stringclass="token punctuation">, class="token keyword">intclass="token operator">> Scoreclass="token punctuation">;stdclass="token double-colon punctuation">::mapclass="token operator"><stdclass="token double-colon punctuation">::stringclass="token punctuation">, Dogclass="token operator">> Petsclass="token punctuation">;Phone MPhoneclass="token punctuation">;class="token comment">// to_class="tags" href="/JSON.html" title=json>json 和 from_class="tags" href="/JSON.html" title=json>json 需要在同一命名空间下class="token keyword">void class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{j class="token operator">= class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">{class="token punctuation">{class="token string">"Name"class="token punctuation">, Nameclass="token punctuation">}class="token punctuation">, class="token punctuation">{class="token string">"Age"class="token punctuation">, Ageclass="token punctuation">}class="token punctuation">}class="token punctuation">;MPhoneclass="token punctuation">.class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(jclass="token punctuation">[class="token string">"MPhone"class="token punctuation">]class="token punctuation">)class="token punctuation">;    class="token comment">// 对象属性to_class="tags" href="/JSON.html" title=json>jsonclass="token keyword">for class="token punctuation">(class="token keyword">autoclass="token operator">& pair class="token operator">: Petsclass="token punctuation">) class="token punctuation">{pairclass="token punctuation">.secondclass="token punctuation">.class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(jclass="token punctuation">[class="token string">"Pets"class="token punctuation">]class="token punctuation">[pairclass="token punctuation">.firstclass="token punctuation">]class="token punctuation">)class="token punctuation">; class="token comment">// map+对象class="token punctuation">}class="token keyword">for class="token punctuation">(class="token keyword">const class="token keyword">autoclass="token operator">& pair class="token operator">: Scoreclass="token punctuation">) class="token punctuation">{    class="token comment">// map+intjclass="token punctuation">[class="token string">"Score"class="token punctuation">]class="token punctuation">[pairclass="token punctuation">.firstclass="token punctuation">] class="token operator">= pairclass="token punctuation">.secondclass="token punctuation">;class="token punctuation">}class="token punctuation">}class="token keyword">void class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(class="token keyword">const class="tags" href="/JSON.html" title=json>jsonclass="token operator">& jclass="token punctuation">)class="token punctuation">{jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Name"class="token punctuation">)class="token punctuation">.class="token function">get_toclass="token punctuation">(Nameclass="token punctuation">)class="token punctuation">;jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Age"class="token punctuation">)class="token punctuation">.class="token function">get_toclass="token punctuation">(Ageclass="token punctuation">)class="token punctuation">;class="token keyword">ifclass="token punctuation">(jclass="token punctuation">.class="token function">containsclass="token punctuation">(class="token string">"Pets"class="token punctuation">)class="token punctuation">)class="token punctuation">{class="token keyword">for class="token punctuation">(class="token keyword">const class="token keyword">autoclass="token operator">& pair class="token operator">: jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Pets"class="token punctuation">)class="token punctuation">.class="token function">itemsclass="token punctuation">(class="token punctuation">)class="token punctuation">) class="token punctuation">{Petsclass="token punctuation">[pairclass="token punctuation">.class="token function">keyclass="token punctuation">(class="token punctuation">)class="token punctuation">] class="token operator">= class="token function">Dogclass="token punctuation">(class="token punctuation">)class="token punctuation">;Petsclass="token punctuation">[pairclass="token punctuation">.class="token function">keyclass="token punctuation">(class="token punctuation">)class="token punctuation">]class="token punctuation">.class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(pairclass="token punctuation">.class="token function">valueclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;class="token punctuation">}class="token punctuation">}class="token keyword">for class="token punctuation">(class="token keyword">const class="token keyword">autoclass="token operator">& pair class="token operator">: jclass="token punctuation">.class="token function">atclass="token punctuation">(class="token string">"Score"class="token punctuation">)class="token punctuation">.class="token function">itemsclass="token punctuation">(class="token punctuation">)class="token punctuation">) class="token punctuation">{  Scoreclass="token punctuation">[pairclass="token punctuation">.class="token function">keyclass="token punctuation">(class="token punctuation">)class="token punctuation">] class="token operator">= pairclass="token punctuation">.class="token function">valueclass="token punctuation">(class="token punctuation">)class="token punctuation">;  class="token punctuation">}class="token punctuation">}class="token keyword">void class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(stdclass="token double-colon punctuation">::string class="tags" href="/JSON.html" title=json>json_strclass="token punctuation">)class="token punctuation">{class="tags" href="/JSON.html" title=json>json j class="token operator">= class="tags" href="/JSON.html" title=json>jsonclass="token double-colon punctuation">::class="token function">parseclass="token punctuation">(class="tags" href="/JSON.html" title=json>json_strclass="token punctuation">)class="token punctuation">;class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(jclass="token punctuation">)class="token punctuation">;class="token punctuation">}
class="token punctuation">}class="token punctuation">;class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)class="token punctuation">{User userclass="token punctuation">;userclass="token punctuation">.Name class="token operator">= class="token string">"zhangsi"class="token punctuation">;userclass="token punctuation">.Age class="token operator">= class="token number">25class="token punctuation">;Phone pclass="token punctuation">{class="token string">"Mi"class="token punctuation">, class="token number">1234class="token punctuation">}class="token punctuation">;userclass="token punctuation">.MPhone class="token operator">= pclass="token punctuation">;userclass="token punctuation">.Scoreclass="token punctuation">[class="token string">"math"class="token punctuation">] class="token operator">= class="token number">88class="token punctuation">;userclass="token punctuation">.Scoreclass="token punctuation">[class="token string">"art"class="token punctuation">] class="token operator">= class="token number">89class="token punctuation">;userclass="token punctuation">.Petsclass="token punctuation">[class="token string">"大黄"class="token punctuation">] class="token operator">= Dogclass="token punctuation">{class="token string">"大黄"class="token punctuation">}class="token punctuation">;userclass="token punctuation">.Petsclass="token punctuation">[class="token string">"小黑"class="token punctuation">] class="token operator">= Dogclass="token punctuation">{class="token string">"小黑"class="token punctuation">}class="token punctuation">;class="tags" href="/JSON.html" title=json>json jclass="token punctuation">;userclass="token punctuation">.class="token function">to_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(jclass="token punctuation">)class="token punctuation">;stdclass="token double-colon punctuation">::cout class="token operator"><< class="token string">"to_class="tags" href="/JSON.html" title=json>json: " class="token operator"><< jclass="token punctuation">.class="token function">dumpclass="token punctuation">(class="token punctuation">) class="token operator"><< stdclass="token double-colon punctuation">::endlclass="token punctuation">;stdclass="token double-colon punctuation">::cout class="token operator"><< class="token string">"to_class="tags" href="/JSON.html" title=json>json with indent:\n" class="token operator"><< jclass="token punctuation">.class="token function">dumpclass="token punctuation">(class="token number">4class="token punctuation">) class="token operator"><< stdclass="token double-colon punctuation">::endlclass="token punctuation">;User new_userclass="token punctuation">;new_userclass="token punctuation">.class="token function">from_class="tags" href="/JSON.html" title=json>jsonclass="token punctuation">(jclass="token punctuation">)class="token punctuation">;stdclass="token double-colon punctuation">::cout class="token operator"><< class="token string">"\n\nuser from class="tags" href="/JSON.html" title=json>json: User\nName: " class="token operator"><< new_userclass="token punctuation">.Name class="token operator"><< class="token string">"\nAge: " class="token operator"><< new_userclass="token punctuation">.Age class="token operator"><< stdclass="token double-colon punctuation">::endlclass="token punctuation">;class="token punctuation">}

http://www.ppmy.cn/devtools/57879.html

相关文章

TCP一定可靠吗

背景 公司某个服务发送TCP报文后,得到的响应是非预期数据 原因竟然是:TCP包的 payload 数据某个bit位被翻转,但是 checksum 的值一样,错误的包被分发给了上层服务 Checksum介绍 IP 头有自己的 Checksum,TCP、UDP 也有自己的 Checksum,分别校验不同部分的数据 IP 头的 …

在linux系统centos上面安装php7gmp扩展

ps:在ubuntu上面安装gmp(最简单) $ sudo apt-get install php7.0-gmp然后再php.ini添加extensionphp_gmp.so <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…

1.Python学习笔记

一、环境配置 1.Python解释器 把程序员用编程语言编写的程序&#xff0c;翻译成计算机可以执行的机器语言 安装&#xff1a; 双击Python3.7.0-选择自定义安装【Customize installation】-勾选配置环境变量 如果没有勾选配置环境变量&#xff0c;输入python就会提示找不到命令…

什么是数据分析?数据分析如何创造企业发挥价值?

数据分析是在具体的业务场景下&#xff0c;如何借助工具&#xff0c;通过数据解决问题的思路 数据底层的四大优势 1.可反复读取和使用 2.客观 3.量化 4.机器可处理 使用数据指导业务&#xff0c;基于数据量化生产 只要是基于量化的信息提升生产力&#xff0c;就是数据分析&a…

关于C#如何在打开新界面时,将旧界面的指定数据发送到新界面的方法

关于C#如何在打开新界面时&#xff0c;将旧界面的指定数据发送到新界面的方法 1.主界面代码1.打开的新界面代码 1.主界面代码 private void Btn_Click(object sender, RoutedEventArgs e) {string value1 "NULL";string value2 "NULL";string value3 &…

在Conda环境中高效使用Kubernetes:跨平台容器化实践指南

摘要 Conda 是一个流行的跨平台包和环境管理器&#xff0c;广泛用于Python社区。而 Kubernetes 是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。本文将探讨如何在 Conda 环境中使用 Kubernetes&#xff0c;包括设置 Conda 环境、容器化应用程…

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE 解决方法&#xff1a;在命令后面加上 -legacy-peer-deps结果&#xff1a; 解决参考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

Cocos Creator 游戏性能优化指南

性能优化 引言一、减少Draw Call什么是Draw Call&#xff1f;为什么要减少Draw Call&#xff1f;减少Draw Call的方法1、剔除I、视锥剔除&#xff1a;摄像机的位置和视角形成一个视锥体&#xff0c;只有位于视锥体内的对象才会被渲染。可以通过检查对象的包围盒&#xff08;Bou…