当前位置: 首页 > news >正文

集群聊天项目服务器----JSON库

JSON库

json是一个轻量级的数据交换格式(数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得Json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

C++的JSON库

JSON for Modern C++ 是一个由德国人nlohmann编写的在C++下使用的JSON库。

具有以下特点:

1、直观的语法

2、整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便

3、使用 C++ 11 标准编写

4、使用 json 像使用 STL 容器一样

5、STL 和 json 容器之间可以相互转换

6、严谨的测试:所有类都经过严格的单元测试,覆盖了100%的代码,包括所有特殊的行为。此外,还检查了Valgrind是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践

JSON使用

    主要是为了将数据序列化 把数据序列化成JSON字节流发送。之后还可以把字节流反序列化转成数据。

包含json头文件

        在网络中,常用的数据传输序列化格式有XML,Json,ProtoBuf,在公司级别的项目中,大量的在使用ProtoBuf作为数据序列化的方式,以其数据压缩编码传输,占用带宽小,同样的数据信息,是Json的1/10,XML的1/20,但是使用起来比Json稍复杂一些,所以项目中我们选择常用的Json格式来打包传输数据。

        下面列举一些项目中用到的有关Json数据的序列化和反序列化代码,仅供参考!JSON for Modern C++这个三方库的使用非常简单,如下所示:

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

序列化:

        就是把我们想要打包的数据,或者对象,直接处理成Json字符串。

json js;
// 添加数组
js["id"] = {1,2,3,4,5};
// 添加key-value
js["name"] = "zhang san"; 
// 添加对象
js["msg"]["zhang san"] = "hello world";
js["msg"]["liu shuo"] = "hello china";
// 上面等同于下面这句一次性添加数组对象
js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello china"}};
cout << js << endl;

而结果如下:

{"id":[1,2,3,4,5],"msg":{"liu shuo":"hello china","zhang san":"hello world"},"name":"zhang san"}

序列化容器:

json js;
// 直接序列化一个vector容器
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(5);
js["list"] = vec;// 直接序列化一个map容器
map<int, string> m;
m.insert({1, "黄山"});
m.insert({2, "华山"});
m.insert({3, "泰山"});
js["path"] = m;cout << js << endl;

强大到直接把C++ STL中的容器内容可以直接序列化成Json字符串

可以得到结果:

如果想要将一个 json 对象转换成字符串格式,并将转换后的字符串输出到控制台。

需要使用到dump函数

string sendBuf = js.dump();
cout << sendBuf.c_str() << endl;

http://www.lqws.cn/news/466561.html

相关文章:

  • 文生视频(Text-to-Video)
  • mysql导入大sql(比如10GB的sql文件)
  • gRPC 框架面试题精选及参考答案
  • 《HTTP权威指南》 第4章 连接管理
  • RA4M2开发涂鸦模块CBU(3)----定时器GPT-PWM调光
  • 18年磨一剑!开利科技启动数字化增量投资新时代
  • 探索 Vue 替代方案
  • Linux文件元信息完全指南:权限、链接与时间属性
  • jar is missing
  • ubuntu22.04下ch341驱动问题
  • Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用
  • 广州华锐互动:以技术创新引领虚拟现实体验新高度
  • 私有规则库:企业合规与安全的终极防线
  • Go 语言 GMP 调度模型解析
  • 从流量为王到留量为王:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径
  • 推客小程序系统开发全攻略:构建社交电商新生态
  • 亚马逊认证考试系列 - 第一部份:基础服务 - AWS SAA C03
  • Maven-添加子模块
  • SylixOS 下的消息队列
  • SQLite 数据库操作完整指南
  • 逆向入门(14、15)程序逆向篇-Brad Soblesky.1-fty_crkme3
  • AWS-SAA 第二部份:安全性和权限管理
  • 操作系统进程与线程核心知识全览
  • Softhub软件下载站实战开发(六):软件配置面板实现
  • LeetCode 1432.改变一个整数能得到的最大差值:暴力模拟/贪心
  • 企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案
  • c++ 虚继承
  • 【软考高级系统架构论文】论云上自动化运维及其应用
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • Spring与SLF4J/Logback日志框架深度解析:从源码看日志系统设计