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

2023-09-14 20:30:25

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->struct
    bool 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->string
    bool 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->struct
    bool 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; 		// 正确和错误码
};

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


更多推荐

幸福里基于 Flink & Paimon 的流式数仓实践

摘要:本文整理自字节跳动基础架构工程师李国君,在StreamingLakehouseMeetup的分享。幸福里业务是一种典型的交易、事务类型的业务场景,这种业务场景在实时数仓建模中遇到了诸多挑战。本次分享主要介绍幸福里业务基于Flink&Paimon构建流式数仓的实践经验,从业务背景、流批一体数仓架构、实践中遇到的问题

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳电压知识准备术语和定义。(1)驱动电机系统通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反转控制。在减速/制动时将电机发出的交流电转化为直流电,将能

APEX数据源加载实现Excel表数据导入及自定义存储过程

在APEX应用程序中会涉及到数据加载,说白了就是导入导出数据到数据库中,这里就以Excel导入数据到TEST_DATA_WXX表为例,来学习共享组件数据源数据加载定义1第一步先导出一个数据模板进入《王小小鸭的学习demo》打开【用户管理】-【操作】-【下载】-【Excel】下载后的Excel数据表是这样的↓2.建表TE

【Linux】基础IO,软硬链接,动静态库

1.认识IO什么是IOI/O简单来说对应的就是两个单词Input和Output,指的是计算机系统与外部环境(通常是硬件设备或其他计算机系统)之间的数据交换过程I/O可以分为两种主要类型:输入(Input):输入是指计算机系统接收来自外部环境的数据或信息的过程。例如,当用户在键盘上输入文本时,这些输入字符被视为输入操作。

9.21号作业

实现把注册的信息导入数据库中second.h#ifndefSECOND_H#defineSECOND_H#include<QWidget>#include<QDebug>namespaceUi{classSecond;}classSecond:publicQWidget{Q_OBJECTpublic:voidnewsl

IT运维:使用数据分析平台监控Windows Eventlog

TIPS:本文鸿鹄版本:2.10.0及以上版本概述本文基于《IT运维:利用鸿鹄采集Windowseventlog数据》(以下简称原文)文章进行了细化与延伸。主要包括细化了安装步骤,增加了仪表板。鸿鹄端配置创建数据集与数据源类型登录鸿鹄提前创建数据集和数据类型,我这里创建的是winlog数据集,下文《安装vector》里

埃文科技受邀出席“安全堤坝”技术论坛

2023年9月11日,2023年国家网络安全宣传周河南省活动开幕式暨河南省网络文明大会在开封博物馆开幕。由CCFYOCSEF郑州举办的“聚焦数据交易监管技术,筑牢数据交易‘安全堤坝’”技术论坛在开封市博物馆二楼会议厅举行。埃文科技总经理王永博士与副总经理武可嘉受邀出席,发表演讲并参与思辨讨论。埃文科技王永博士从“数据流

数据分析思维-分析方法(基础)

数据分析的基础方法概念理解,其关键在于在业务中锻炼数据分析思维。(将以下基础方法带有好奇心的应用在生活中练习数据分析思维)例如:经典的啤酒与尿布(分析一个爸爸去超市买东西的行为,将尿布和啤酒放在一起)例如:分析夜市上100家店那些营业高、利润经营类型等等主要是养成数据分析的思维,可应用工作、生活日常的方方面面。1.象限

Java学习笔记39——网络编程03

TCP通信程序TCP通信程序TCP通信原理TCP发送数据的步骤TCP接收数据的步骤TCP通讯程序练习练习1练习2练习3练习4练习5练习6TCP通信程序TCP通信原理TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通

URL与URI小结

文章目录一、URL是什么?URL的一般形式:二、分类三、URI总结一、URL是什么?每条由Web服务器返回的内容都是和它管理的某个文件相关联的,这些文件中的每一个都有一个唯一的名字,叫做URL(通用资源定位符),是互联网上一种资源的地址。例如:http://www.google.com:80/index.htmlURL

实训笔记——Spark计算框架

实训笔记——Spark计算框架Spark计算框架一、Spark的概述二、Spark的特点三、Spark的安装部署(安装部署Spark的ClusterManager-资源调度管理器的)3.1本地安装--无资源管理器3.2Spark的自带独立调度器Standalone3.2.1主从架构的软件3.2.2Master/work

热文推荐