当前位置: 首页 > 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;

相关文章:

  • C语言:排序算法
  • 作为测试人员,平时用什么大模型?怎么用?
  • PHP语法基础篇(五):流程控制
  • 如何匹配晶振的负载电容
  • 【SystemVerilog 2023 Std】第6章 数据类型 Data types (1)
  • C# 网络编程-关于请求头(Request Headers)和 响应头(Response Headers)作用(五)
  • SiteAzure:解决数据库服务器内存频繁吃满
  • 【Linux 平台总线驱动开发实战】
  • 三种语言写 MCP
  • 大数据量的分页,怎么办?
  • MagnTek MT6816-ACD 一款基于各向异性磁阻(AMR)技术的磁性角度传感器 IC
  • 现代浏览器剪贴板操作指南 + 示例页面 navigator.clipboard 详解与实战
  • 1.20.1 服务器系统(windows,Rocky 和 Ubuntu )体验
  • 浅议 3D 展示技术为线上车展新体验带来的助力​
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 基于Spring Boot瀚森健身房会员管理系统设计与实现【源码+文档】
  • React JSX语法
  • 基于YOLO的智能车辆检测与记录系统
  • Vue.js 粒子连线动画组件 - FlyingLines
  • 【RAG优化】深度解析开源项目MinerU:从PDF解析到多模态理解的工业级解决方案
  • 福州市建设厅网站/北京百度seo公司
  • 华为云建站和阿里云建站区别/无限制搜索引擎排名
  • 关于做好学院网站建设的要求/seo关键词快速提升软件官网
  • 张家港网站制作服务/seo优化平台
  • 做嫒嫒网站/免费发布信息
  • 做女团学什么舞蹈视频网站/汽车seo是什么意思