JSON的序列化与反序列化以及VSCode执行Run Code 报错

JSON

JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式。

JSON格式

{ 
	"name":"金苹果", 
	"info":"种苹果" 
}

一个对象:由一个大括号表示.括号中通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:键与值之间使用冒号连接, 多个键值对之间使用逗号分隔,键值对的键 应使用引号引住,键值对的值, 可以是JS中的任意类型的数据。

JSON for Modern C++ 是一个由德国大牛nlohmann编写的在 C++ 下使用的 JSON 库,具有以下特点:

  • 直观的语法
  • 整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复奈的构建系统,使用起未非常方便
  • 使用 C++ 11 标准编写
  • 使用 JSON 像使用 SIL 容器一样
  • SIL和JSON 容器之间可以相互转换
  • 严谨的测试:所有类都经过严格的单元测试,覆盖了100%的代码,包括所有特殊的行为。此外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践。

序列化和反序列化

序列化 js.dump()

序列化是将对象转换为字节流的一种方式,可以将对象写入文件,保存到数据库或者是进行网络传输发送到另外一个系统,这样即使在不同的环境或者系统中,只要可以读取这些字节流就可以构建出与初始对象状态完全相同的对象。

#include "json.hpp"
using json = nlohmann::json;

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

void func1() {
    json js;
    js["msg_type"] = 2;
    js["from"] = "zhang san";
    js["to"] = "li si";
    js["msg"] = "hello!";
    string sendBuf = js.dump();  //json数据对象=》序列化 json字符串
    cout <<sendBuf.c_str()<<endl;
}

void func2() {
    json js;
    js["id"] = {1,2,3,4,5};
    js["name"] = "zhang san";
    js["msg"]["zhang san"] = "hi";
    js["msg"]["liu shuo"] = "ha";
    js["msg"] = {{"zhang san","hi"},{"liu shuo","ha"}};
    cout << js <<endl;
}

void func3() {
    json js;
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    js["list"] = vec;

    map<int,string> m;
    m.insert({1,"h"});
    m.insert({2,"w"});
    m.insert({3,"r"});
    js["path"] = m;

    cout << js <<endl;
}

int main() {
	func1();
	func2();
	func3();


    return 0;
}

在这里插入图片描述

反序列化 json::parse();

反序列化,将二进制流转为对象的一种形式。是序列化的逆过程,即将序列化后的数据重新还原成原始的数据结构或对象。反序列化是从文件、网络数据或数据库中读取序列化的数据,并将其转换回原始形式,以便在程序中进行使用和操作。

#include "json.hpp"
using json = nlohmann::json;

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

string func4() {
    json js;
    js["msg_type"] = 2;
    js["from"] = "zhang san";
    js["to"] = "li si";
    js["msg"] = "hello!";
    string sendBuf = js.dump();  //json数据对象=》序列化 json字符串
    //cout <<sendBuf.c_str()<<endl;
    return sendBuf;
}

string func5() {
    json js;
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    js["list"] = vec;

    map<int,string> m;
    m.insert({1,"h"});
    m.insert({2,"w"});
    m.insert({3,"r"});
    js["path"] = m;

    string sendBuf = js.dump(); 
    return sendBuf;
    //cout << js <<endl;
}

int main() {
    string recvBuf = func4();
    //数据的反序列化 json字符串=》 反序列化 数据对象(看作容器,方便访问)
    json jsbuf = json::parse(recvBuf);
    
    cout<<jsbuf["msg_type"]<<endl;
    cout<<jsbuf["from"]<<endl;
    cout<<jsbuf["to"]<<endl;
    cout<<jsbuf["msg"]<<endl;


    string recvBuf1 = func5();
    json jsbuf1 = json::parse(recvBuf1);
    vector<int> vec = jsbuf1["list"];
    for(int &v : vec)
    {
        cout<< v <<" ";
    }
    cout<<vec[1]<<endl;

    map<int, string> mymap = jsbuf1["path"];
    for(auto &p : mymap)
    {
        cout<<p.first<<" "<<p.second<<endl;
    }

    return 0;

}

在这里插入图片描述

注意VSCode可能在run code会报错:

在这里插入图片描述

解决办法:

打开code runner,点齿轮
在这里插入图片描述
选择扩展设置
在这里插入图片描述
找到 Code-runner:Executor Map 点击 在settings.json中编辑
在这里插入图片描述
在 "code-runner.executorMap"中 找到 “cpp” 的这一行,在 $fileNameWithoutExt 的后面添加 -std=c++11 保存后即可使用
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年 电工杯 (A题)大学生数学建模挑战赛 | 园区微电网风光储协调优化配置 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享&#xff0c;与你一起了解前沿科技知识&#xff01; 本次DeepVisionary带来的是电工杯的详细解读&#xff1a; 完整内容可以在文章末尾全文免费领取&阅读&#xff01; 问题重述…

MVS net笔记和理解

文章目录 传统的方法有什么缺陷吗&#xff1f;MVSnet深度的预估 传统的方法有什么缺陷吗&#xff1f; 传统的mvs算法它对图像的光照要求相对较高&#xff0c;但是在实际中要保证照片的光照效果很好是很难的。所以传统算法对镜面反射&#xff0c;白墙这种的重建效果就比较差。 …

【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;unittest编写测试用例&#x1f680;unittest测…

【408精华知识】Cache类题目解题套路大揭秘

有关Cache的题目&#xff0c;需要理解Cache的工作原理&#xff0c;也即给出一个地址&#xff0c;要知道如何在Cache中寻找或者如何将其从主存中复制入Cache&#xff0c;同时理解Cache中具体是如何存储的&#xff0c;包含三种存储方式&#xff0c;分别是直接映射、全相联映射、组…

clion/pycharm 安装中文

楼主版本 2024.1 mac 操作系统&#xff0c;理论上不同版本和不同操作系统操作应该大同小异 首先找到插件的位置 方式一 1、进入工程&#xff0c;右上角找到设置 2、找到插件&#xff08;欢迎界面也能找到这个&#xff09; 方式二 在欢迎界面找到插件 最后 插件商店搜索 l…

矩阵乘法不满足交换律-反证法

假定有2个矩阵A和B A*B 不等于 B*A 手写证明&#xff1a; A*B为 B*A为 由此可以看出&#xff0c;矩阵乘法不满足交换律&#xff01;&#xff01;

Python | Leetcode Python题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

centos7和centos8安装mysql5.6 5.7 8.0

https://dev.mysql.com/downloads/repo/yum/ 注意构造下http://repo.mysql.com/mysql-community-release-el*-*.noarch.rpm 【以centos7为例】 安装mysql5.6 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5…

初识Qt:从Hello world到对象树的深度解析

Qt中的对象树深度解析 Hello world1.图形化界面创建命令行式创建在栈上创建在堆上创建为什么传文本需要QString&#xff0c;std::string不行吗&#xff1f;那为什么要传入this指针&#xff1f;为什么new后不用显示调用delete函数呢&#xff0c;不会造成内存泄漏问题吗&#xff…

国产操作系统上使用SQLynx连接数据库 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上使用SQLynx连接数据库 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在国产操作系统上使用SQLynx。这是一款功能强大的数据库管理工具&#xff0c;可以帮助用户高效地管理和操作数据库。本文将详细介绍…

2024 电工杯高校数学建模竞赛(A题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024电工杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

Docker搭建mysql性能测试环境

OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…

NLP(18)--大模型发展(2)

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 Transformer结构&#xff1a; LLM的结构变化&#xff1a; Muti-head 共享&#xff1a; Q继续切割为muti-head,但是K,V少切&#xff0c;比如切为2个&#xff0c;然后复制到n个muti-head减少参数量&#xff0c;加速训练 atte…

STM32-串口通信波特率计算以及寄存器的配置详解

您好&#xff0c;我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台&#xff0c;本着大家一起互相学习的心态而建立&#xff0c;不太成熟&#xff0c;希望志同道合的朋友一起来&#xff0c;抱歉打扰您了QQ群372991598 串口通信基本原理 处理器与外部设备通信的两种方式 并行…

flume使用实例

1、监听端口a1.sources.r1.type netcat 配置文件nc-flume-console.conf # Name the components on this agent a1 表示jvm进程名 a1.sources r1 a1.sinks k1 a1.channels c1 # Describe/configure the source a1.sources.r1.type netcat a1.sources.r1.bind node…

《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二

易采游戏网5月24日消息&#xff0c;在刚刚过去的四月&#xff0c;全球手游市场迎来了一场收益的盛宴&#xff0c;其中《王者荣耀》以其惊人的吸金能力&#xff0c;以2.34亿美元的月收入在全球手游排行榜上位列第二。4月5日&#xff0c;这款由腾讯游戏开发的多人在线战斗竞技游戏…

软考考前前怎么复习?

有一些经验&#xff0c;可以和大家分享一下。 软考的考试内容 软考包含许多科目&#xff0c;共分为五大类&#xff0c;27个专业。 软考的等级不同&#xff0c;考试内容也有所不同。初级和中级考试只包括两门科目&#xff0c;而高级则需要考三门科目。每门科目满分75分&#x…

knife4j-swagger

文章目录 knife4j-swagger第 1 步&#xff1a;引入 jar 包第 2 步&#xff1a;添加注释来开启 knife4j第 3 步&#xff1a;验证问题解决新增功能&#xff1a;ApiOperationSupport 注解新增功能&#xff1a;DynamicParameters 注解忽略参数属性 knife4j-swagger knife4j 是 Swa…

W801 实现获取天气情况

看了小安派&#xff08;AiPi-Eyes 天气站&#xff09;的源码&#xff0c;感觉用W801也可以实现。 一、部分源码 main.c #include "wm_include.h" #include "Lcd_Driver.h"void UserMain(void) {printf("\n user task \n");Lcd_Init();Lcd_Clea…

Qt官方示例---opengl

文件相对路径&#xff1a;Examples\Qt-5.9.1\opengl 2dpainting cube computegles31 contextinfo hellogl2 hellowindow paintedwindow qopenglwidget qopenglwindow textures threadedqopenglwidget