关于c++结构体的序列化与反序列化
在现代软件开发中,协议交互是不可或缺的一部分。协议交互使得不同的系统能够相互通信和交换数据,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于协议交互中。
首先,让我们来看一下JSON的结构。JSON使用键值对的方式来表示数据,这种结构非常适合在不同的编程语言之间进行数据交换。它使用简单的文本格式,易于理解和编写,同时也易于解析和生成。这使得开发人员能够快速地处理和解释数据,而无需复杂的解析逻辑。
其次,JSON具有高度的可读性。与其他数据交换格式相比,如XML,JSON的语法更简洁、更直观。它使用了常见的数据类型,如字符串、数字、布尔值和数组。这使得开发人员能够轻松地读取和理解数据,无需额外的文档或解释。
此外,JSON具有良好的兼容性。它可以很容易地与其他编程语言进行集成,并且可以在不同的平台和环境中无缝地进行数据交换。这种灵活性使得开发人员能够选择他们熟悉和喜欢的编程语言进行开发,而不必担心数据交换的问题。 JSON还具有可扩展性。开发人员可以根据自己的需求定义自定义的数据结构,并将其嵌入到JSON中。这使得协议交互更加灵活和适应性强,可以满足各种不同的需求。
最后,JSON具有广泛的支持和社区。几乎所有现代编程语言都有JSON的解析和生成库,这使得开发人员能够轻松地在他们的项目中使用JSON。此外,开发人员可以从社区中获取大量的资源、教程和示例代码,以帮助他们更好地使用JSON进行协议交互。
综上所述,JSON作为一种简单、可读性高、兼容性好、可扩展性强的数据交换格式,为程序员们提供了一种方便、高效的方式来进行协议交互。无论是在Web开发、移动应用开发还是其他领域,JSON都是不可或缺的工具之一。
今天为大家推荐一个十分好用的序列化工具库,可将c++中的结构体转化为json结构字符串,这样更加的便于程序员开发与外部程序进行协议交互。
以下举例如何使用:
首先我们已知协议文档如下:
变量中文名 变量名称 类型
姓名 name string
年龄 age int
工资 salary double
性别 sex bool(true为男,false为女)
则我们可以在c++中定义以下结构体:
struct Programmer
{
std::string name;//姓名
int age;//年龄
double salary;//薪资
bool sex;//性别
};
将结构体定义为宏,为了后边序列化反序列化能找到该结构体
REFLECTION(Programmer, name, age, salary, sex)
包含头文件
#include <iostream>
#include <iguana/json_serializer.hpp>
int main()
{
Programmer test;
test.name = “小王”;
test.age = 20;
test.salary = 3500.00;
test.sex = true;
std::string text = iguana::JsonSearializer::Searialize(test);//将类序列化为文本 std::cout<<text<<std::endl;
Programmer test1;
iguana::JsonSearializer::Desearialize(text,test1);//反序列化到类中 std::cout<<test1.name<<endl;
}
输出为: {"name":"小王","age":20,"salary":3500.000000,"sex":true}
“小王”
这样,我们就可以简单的通过c++的结构体来进行json字符串的协议对接了。
注:此库需要c++17及以上才可用,若有大家有c++低版本需求后续可出低版本教程
若大家需要源码,欢迎移步我的知识星球或私信我。
https://wx.zsxq.com/dweb2/index/group/48884884442118