c++中超级好用的json库--json for morden c++

文章目录

  • json简介
  • 在线解析json的工具
  • json for morden c++简介
  • 简单使用

json简介

json是一种轻量简单的数据结构,常用于网络数据传输,相较于xml他更加简介轻量,相较于protobuf它的学习成本更低几乎看个十几分钟就能上手,因为就是一种键值对的形式类似于集合

{“acceptID”:“456789156”,“map”:[[1,“123”],[2,“456”],[3,“789”]],“msg”:“hello world”,“sendID”:“32154646”,“type”:1,“vec”:[1,2,3,4]}
格式化之后变为下面这样:

{"acceptID":"456789156","map":[[1,"123"],[2,"456"],[3,"789"]],"msg":"hello world","sendID":"32154646","type":1,"vec":[1,2,3,4]
}

在线解析json的工具

https://www.json.cn/blog/.git/json/json/
在这里插入图片描述

json for morden c++简介

c++中还是有很多的json库的比如libjson,jsoncpp…
但是用起来比较麻烦需要链接库啊什么的,而且我们使用json一般只需要用到序列化和反序列化这两个功能所以只需要轻量级的json库就能满足我们的需求了,那么json for morden c++就是你最好的选择

json for morden c++是一个德国的大佬写的在github上已经有将近40k的star数了,
github地址:https://github.com/nlohmann/json

优点:
1、引入工程非常简单:只需要把github上的single_include目录下的json.hpp拷到你的项目中就行了
在这里插入图片描述

2、使用简单:核心类就是nlohmann::json
重载了[]运算符,添加键值对,json[key]=value;就行了
序列化方法:dump
反序列化:json::parse(json字符串)

3、和STL中的容器高度兼容
可以直接把容器当作键值对的值

4、跨平台
基于c++11写的所以在wlin或者linux下使用都只需要把json.hpp拷进来就可以了

5、模板编程的优秀范例
全部使用模板,想学习模板编程可以好好研究一下它的源码

缺点:
只能识别utf-8的字符

简单使用

#include "json.hpp"
#include <iostream>
#include <vector>
#include <map>
using json = nlohmann::json;// 序列化测试
// json对象序列化成json字符串
std::string Serialize()
{json js;std::vector<int> vec = {1, 2, 3, 4};std::map<int, std::string> map_;map_.insert(std::make_pair<int, std::string>(1, "哈哈哈"));map_.insert(std::make_pair<int, std::string>(2, "啦啦啦"));map_.insert(std::make_pair<int, std::string>(3, "呀呀呀"));js["type"] = 1;js["send"] = "张三";js["accept"] = "李四";js["msg"] = "李四,你在干嘛";js["vec"] = vec;js["map"] = map_;std::cout << js << std::endl;return js.dump();
}
// 反序列化
void Deserialize()
{json js = json::parse(Serialize());std::cout << "type:" << js["type"] << std::endl;std::cout << "send:" << js["send"] << std::endl;std::cout << "accept:" << js["accept"] << std::endl;std::cout << "msg:" << js["msg"] << std::endl;std::cout << "vec:" << js["vec"] << std::endl;std::map<int, std::string> j_map = js["map"];std::cout << "map:" << std::endl;for (auto &pr : j_map)std::cout << pr.first << "," << pr.second << std::endl;
}int main()
{Serialize();/*{"accept":"李四","map":[[1,"哈哈哈"],[2,"啦啦啦"],[3,"呀呀呀"]],"msg":"李四,你在干嘛","send":"张三","type":1,"vec":[1,2,3,4]}*/Deserialize();return 0;
}

效果:
在这里插入图片描述

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

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

相关文章

【J-Flash基本使用总结】

【J-Flash基本使用总结】 VX&#xff1a;hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ J-Flash下载程序到单片机 ■ J-Flash拼接多个hex或bin文件■ J-Flash读单片机的option byte■ J-Flash读单片机Flash数据■ 将读出来的文件用jflash烧录到其他的芯片■ 设…

【C语言基础考研向】02 数据类型-常量-变量

文章目录: 一.数据类型 二.常量 三.变量 四. 整型数据 五.浮点型数据 六.字符型数据 七.字符串常量 一.数据类型 数据类型分为四大类: 基本类型 整型浮点字符型 构造类型 数组结构体 指针类型空类型 二.常量 常量是指在程序运行过程中&#xff0c;其值不发生变化的量。常量又…

Axure组件库免费下载,国内外资源都在这儿!

Axure 组件库具有高效再利用的价值。在设计中合理使用 Axure 组件库可以快速启动工作&#xff0c;避免重复简单的劳动&#xff0c;减轻设计师的负担&#xff0c;从而大大提高团队的生产力。在本文中&#xff0c;我们将分享如何下载 Axure 组件库&#xff0c;并附上 Axure 组件库…

SQL性能分析

SQL性能分析 1、SQL执行频率 ​ MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信 息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; …

Python源码23:海龟画图turtle画小狗狗

---------------turtle源码集合--------------- Python教程43&#xff1a;海龟画图turtle画小樱魔法阵 Python教程42&#xff1a;海龟画图turtle画海绵宝宝 Python教程41&#xff1a;海龟画图turtle画蜡笔小新 Python教程40&#xff1a;使用turtle画一只杰瑞 Python教程39…

2024年第十届控制、自动化与机器人国际会议(ICCAR 2024)即将召开!

2024年4月27~29日 新加披 会议官网&#xff1a;10th-ICCAR 2024https://iccar.org/index.html 第十届控制、自动化和机器人国际会议将于2024年4月27-29日在新加坡举办。本次会议由新加坡电子学会&#xff0c;IEEE机器人和自动控制协会和IEEE联合主办&#xff0c;并得到北京航空…

day2·算法-快乐数-有效三角形个数

今天又来更新啦&#xff0c;准备蓝桥杯的小伙伴可以和我一起来刷题&#xff0c;建议大家先看题&#xff0c;整理出思路&#xff0c;再看如何用简单的写法将思路构建出来&#xff0c;然后优化细节&#xff0c;找到解决某些例外出现的方法&#xff0c;从而成功解答这道题。 快乐…

群发邮件的免费软件?做外贸用什么邮箱好?

群发邮件的免费软件有哪些&#xff1f;好用的邮件群发软件&#xff1f; 在数字时代&#xff0c;邮件已成为人们沟通的主要方式之一。有时候&#xff0c;我们需要给大量的联系人发送信息&#xff0c;这时候&#xff0c;群发邮件就显得格外重要。接下来蜂邮就来探讨一下那些值得…

SuperMap iDesktopX 11i(2023) 新特性之按过滤条件删除对象

作者&#xff1a;bsy 文章目录 前言功能入口&#xff1a;参数说明&#xff1a;结果展示&#xff1a; 前言 当对一个大数据量的数据集删除多个数据时&#xff0c;旧版本的 iDesktopX 可以从地图中选择要素删除&#xff0c;也可以从属性表中选中一行进行删除&#xff0c;但是操作…

Transformer简单理解

目录 一、CNN存在的问题&#xff1a;二.Transformer整理架构分析&#xff1a;1.Linear Projection of Flattened Patches层形成Patch&#xff1a;2.对每个Patch进行位置编码Position Embedding&#xff1a;3.Transformer Encoder: 三.公式解读&#xff1a; 一、CNN存在的问题&a…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…

数据结构学习 jz45 把数组排成最小的数

关键词&#xff1a;贪心 排序 快速排序 题目&#xff1a;破解闯关密码 思路&#xff1a; 快排自己制定快排规则 开辟一个vector存string&#xff0c;自己制定排序规则&#xff0c;然后用快排比较string大小。 排序规则&#xff1a; sort(strs.begin(),strs.end(),[](string…

建造者模式深入理解:演示建造单个和多个产品的实践,结合模板模式,通俗易懂

首先呢看下建造者的定义是什么样的&#xff0c;先读一遍 建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它主要用于将一个复杂对象的构建过程与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表现形式。这种模式…

编程笔记 html5cssjs 040 CSS盒子模型

编程笔记 html5&css&js 040 CSS盒子模型 一、CSS 盒子模型二、元素的宽度和高度三、最终元素的总宽度四、元素的总高度五、练习小结 网页是靠分成不同的块&#xff0c;再赋予这些块各不相同的属性来布局的。所以这个“块”是一个基础。先看块本身的构造。 一、CSS 盒子…

深度学习笔记(四)——使用TF2构建基础网络的常用函数+简单ML分类实现

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 TF2基础常用函数 1、张量处理类 强制数据类型转换&#xff1a; a1 tf.constant([1,2,3], dtypetf.floa…

网络传输文件软件哪个好?企业该如何选择?

随着互联网技术的飞速发展&#xff0c;网络传输文件软件已经成为企业日常工作中不可或缺的一部分。然而&#xff0c;在市场上众多的网络传输文件软件中&#xff0c;很多企业对于如何选择合适的方案感到困惑。那么&#xff0c;究竟什么是网络传输文件软件&#xff1f;它有哪些作…

怎么注册微商城?开启微商城之旅

在这个数字化时代&#xff0c;微商城的出现为商家提供了一个全新的机会&#xff0c;商家企业可以通过微商城来展示和销售自己的产品。而对于一些商家而言&#xff0c;不知道怎么注册微商城。下面给大家做一个简单的分享。 第一步&#xff1a;选择合适的微商城搭建工具 在注册…

计算机毕业设计 | SpringBoot宠物店管理系统(附源码)

1&#xff0c;绪论 项目背景 我国已经成为世界第二大经济体&#xff0c;经济实力高速发展以及百姓生活水平的普遍提高&#xff0c;不断地要求企业提供更加多元化的娱乐方式&#xff0c;更加快速和方便的服务&#xff0c;因此对宠物行业也提出了更加严格的要求&#xff0c;如管…

洛谷 P1523 旅行商简化版【线性dp+npc问题简化版】

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1523 题目背景 欧几里德旅行商(Euclidean Traveling Salesman)问题也就是货郎担问题一直是困扰全世界数学家、计算机学家的著名问题。现有的算法都没有办法在确定型机器上在多项式时间内求出最优解&#xff0c;但是有…

二叉树(完全二叉树,满二叉树,二叉树的特性,遍历方式,根据遍历方式画出完整的二叉树图相关例题)

目录 基本概念 一、二叉树&#xff08;满二叉树&#xff0c;完全二叉树&#xff09; 二、二叉树的特性 1、若规定根节点的层数为1&#xff0c;则一棵非空二叉树的第i层最多有2^(i-1) 个节点&#xff08;i>0&#xff09; 2、若规定只有根节点的二叉树的深度为1&#xff0…