【Linux】网络协议:(序列化和反序列化)json 的安装和简单使用

文章目录

  • 1. 下载 json
  • 2. 基本使用
      • value 类型:万能类型
      • Writer 类型:序列化
      • Reader 类型:反序列化
  • 3. 使用举例

1. 下载 json

yum makecache fast
yum -y install jsoncpp-devel

2. 基本使用

  • 头文件:
#include <jsoncpp/json/json.h>
  • 编译时需要加上 -ljsoncpp

value 类型:万能类型

  • json::value:是一种万能对象类型,能接收任意 kv 类型,储存的值会自动转成 字符串类型

  • 使用 中括号 [] 进行 定义拿取

  • asInt():可以将提取的 string,转化成 int 类型

Writer 类型:序列化

  • json::FastWriter:用于快速序列化的数据类型,即,可以将 struct 转成 string,用于传输

  • json::StyleWriter:也是用于序列化的数据类型,格式更加清楚美观

  • write():将 value 类,以序列化 string 格式,写入网络

Reader 类型:反序列化

  • json::Reader:用于反序列化的数据类型,即,可以将从网络接收到的 stirng 转成 struct,用于业务处理

  • json::StyleWriter:也是用于序列化,格式更加清楚美观

  • parse():从相应的流(网络)里面,将 string 信息读取到 json::Value 中去

  • 使用中括号可以对内容进行提取,asInt() 可以将 string 转化成 int 类型

3. 使用举例

🌰此处举例协议内容为:整数的加减乘除取模的运算及输出方式。

// 【请求】
class Request
{
public:Request() {}Request(int x, int y, char op) : _x(x), _y(y), _op(op){}// struct->string// "_x _op _y"bool Serialize(std::string *outStr){*outStr = "";Json::Value root; root["x"] = _x; root["y"] = _y;root["op"] = _op;Json::StyledWriter writer;	// Json::FastWriter writer; *outStr = writer.write(root);return true;}// string->structbool Deserialize(const std::string &inStr){Json::Value root;Json::Reader reader; reader.parse(inStr, root);_x = root["x"].asInt();     // json::Value root 里面全是string,需要类型转换一下_y = root["y"].asInt();_op = root["op"].asInt();   // op也转成int,放入char里会被解释成操作符return true;}~Request() {}public:int _x;int _y;char _op;
};// 【相应】
class Response
{
public:Response() {}Response(int result, int code) : _result(result), _code(code){}// struct->stringbool Serialize(std::string *outStr){*outStr = "";Json::Value root;root["result"] = _result;root["code"] = _code;// Json::FastWriter writer;Json::StyledWriter writer;*outStr = writer.write(root);return true;}// string->structbool Deserialize(const std::string &inStr){Json::Value root;Json::Reader reader;reader.parse(inStr, root);_result = root["result"].asInt();_code = root["code"].asInt();return true;}~Response() {}public:int _result;	// 计算结果int _code; 		// 正确和错误码
};

🥰如果本文对你有些帮助,请给个赞或收藏,你的支持是对作者大大莫大的鼓励!!(✿◡‿◡) 欢迎评论留言~~


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

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

相关文章

LeetCode(力扣)55. 跳跃游戏Python

LeetCode20. 有效的括号 题目链接代码 题目链接 https://leetcode.cn/problems/jump-game/ 代码 class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums) < 1:return Truecover 0for i in range(len(nums)):if i < cover:cover max(cover, i …

免备案海外服务器有什么好处?

介绍一&#xff1a;了解海外服务器免备案的优点 免备案海外服务器是指在国外搭建网站服务器而不是在国内备案&#xff0c;这种模式可以带来一定的便利 。首先&#xff0c;海外服务器免备案可以使网站更加稳定&#xff0c;因为国外网络环境更加稳定&#xff0c;大多数国外服务 器…

Ubuntu 22.04 安装配置 flatpak

Ubuntu 22.04 安装配置 Flatpak 安装 Flatpak sudo apt install flatpakFlatpak 仓库配置 官方仓库 https://flathub.org/repo/flathub上交大镜像 https://mirror.sjtu.edu.cn/flathub flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatp…

CPU、内存、缓存、硬盘的定义和关系

CPU、内存、缓存、硬盘 文章目录 CPU、内存、缓存、硬盘1. CPU2. 内存3. 缓存4. 硬盘5. 数据交换过程 1. CPU CPU&#xff1a;CPU是中央处理器&#xff08;Central Processing Unit&#xff09;的缩写&#xff0c;中央处理器是一块超大规模的集成电路&#xff0c;是一台计算机…

torch.from_numpy()函数(pytorch版)

torch.from_numpy(ndarray) 的作用就是将生成的数组&#xff08;array&#xff09;转换为张量Tensor。 该方法等同于torch.Tensor(ndarray)。 举例说明&#xff1a; 单纯的torch.from_numpy(ndarray)方法。 import numpy import torchdata1 numpy.array([5, 6, 9]) print…

三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析

三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析 在处理三维模型3DTile格式的轻量化压缩时&#xff0c;如何在减少数据量的同时&#xff0c;保证或提升数据质量是一大挑战。以下为一些提升数据质量的方法分析&#xff1a; 改进几何简化算法&#xff1a;在进行几何简化…

【MySQL系列】- MYSQL锁机制

【MySQL系列】- MYSQL锁机制 文章目录 【MySQL系列】- MYSQL锁机制一、表级锁表加读锁表独占锁释放锁 二、行级锁间隙锁&#xff08;Gap Locks&#xff09;临键锁&#xff08;Next-key Locks&#xff09; 三、页级锁四、共享锁&#xff08;S锁&#xff09;五、排他锁&#xff0…

webman跨域相关问题

2023年9月13日14:14:05 webman版本1.5 php版本8.0 运行环境windows 测试项目&#xff1a;https://gitee.com/open-php/zx-webman-website webman在跨域的时候&#xff0c;会有点不同因为第一个区别就是是否关闭自动路由 //关闭自动路由 Route::disableDefaultRoute();如果不…

List知识总结

ArrayList: 1 ArrayList扩容底层用到的是&#xff1b;System.arraycopy. 2 扩容的长度计算&#xff1b;int newCapacity oldCapacity (oldCapacity >> 1);&#xff0c;旧容量 旧容量右移1位&#xff0c;这相当于扩容为原 来容量的(int)3/2. 3 ArrayList<String…

02-yaml资源文件

1、创建pod的基础文件 创建pod的yaml文件详解 --- apiVersion: extensions/v1beta1 #当前格式的版本 kind: Deployment #当前创建资源的类型&#xff0c; 当前类型是Deployment metadata: #当前资源的元数据name…

Unity解决:Unity SpriteRenderer屏幕自适应的多种模式

上代码&#xff1a; using UnityEngine;[RequireComponent(typeof(Camera))] public class SpriteAdapter : MonoBehaviour {[System.Serializable]public class SpriteInfo{public SpriteRenderer Value null;public EFillModel Model EFillModel.ShowAll;}public enum EFi…

Vue知识系列(5)每天10个小知识点

目录 系列文章目录Vue知识系列&#xff08;1&#xff09;每天10个小知识点Vue知识系列&#xff08;2&#xff09;每天10个小知识点Vue知识系列&#xff08;3&#xff09;每天10个小知识点Vue知识系列&#xff08;4&#xff09;每天10个小知识点 知识点41.vue常用基本指令有哪些…

行业报告 | 智慧三角:长三角掀起AI产业热潮

原创 | 文 BFT机器人 产业集群是指在特定地理区域内&#xff0c;一群相关产业相互依存、相互关联、相互支持&#xff0c;形成密集的产业网络和价值链条的现象&#xff0c;这些相关产业可能涵盖整个产业链的不同环节&#xff0c;从原材料供应到产品研发、生产、销售和服务等多个…

使用C#开发163邮件发送功能

创建SMTP服务器&#xff08;发送邮件需要SMTP服务器代发&#xff09; 这里介绍创建网易SMTP&#xff08;SMTP是邮件通讯格式&#xff09;服务器&#xff1a; 1.先注册一个163网易邮箱 2.注册成功后登陆该邮箱 3.在该邮箱中找到设置>POP3/SMTP/IMAP点击进入&#xff0c;如下…

thinkphp:判断数据是否存在,再作为数据库的判断条件(给数据库查询增加额外的查询条件)

方法一&#xff1a;用thinkphp的语法去写 public function select_endProduceinfo(){$like_info input(post.like_info, );$page input(post.page, 1);$pageSize input(post.pageSize, 10);$start ($page - 1) * $pageSize;$username input(post.username,);$search_line…

怎样用图片去搜索商品呢?

taobao.item_search_img 为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个taobao应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载taobaoAPI的SDK并掌握基本的API基础知识和…

Docker基础入门

文章目录 前言一、什么是DockerDocker 安装Docker 镜像Docker 容器Docker 安装nginx 前言 在Linux上安装软件有三种方式&#xff1a; 在redhat系列下的发行版通过rpm包安装或者是在debian系列下的发行版通过deb包安装&#xff1b;通过工具安装&#xff0c;在redhat系列下的发…

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

prometheus 告警

prometheus 告警 1, prometheus 告警简介 告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。 在Prometheus中一…

VS 2015编译 Wireshark2.6.14

1.编译环境 1.1 Windows 8.1 64位 1.2 Microsoft Visual Studio Enterprise 2015 1.3 Python 2.7.18 1.4 Cygwin 3.4.8 1.5 CMake 3.27.4 1.6 wireshark-2.6.14源码 1.7 wireshark依赖库文件 2.安装VS2015 安装路径:C:\Program Files (x86)\Microsoft Visu…