千家信息网

UDP畅聊系统数据的序列化与反序列化

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,comm中实现基本数据的序列化与反序列化基于jsoncpp库,由c++编写,用于为网络数据提供序列化及反序列化功能使用的几个类Json::Value 可表示所有的类型,int,float,string
千家信息网最后更新 2024年10月17日UDP畅聊系统数据的序列化与反序列化

comm中实现基本数据的序列化与反序列化

基于jsoncpp库,由c++编写,用于为网络数据提供序列化及反序列化功能

使用的几个类

Json::Value 可表示所有的类型,int,float,string等

Json::Reader 将json字符串解析到Value中,反序列化,使用Parse函数

Json::Writer 将Value转换成json字符串型,序列化

它的两个子类:Json::FastWriter 和Json::StyledWriter 两种不同的显示风格

Makefile

 1 ROOT_PATH=$(shell pwd)  2 INCLUDE=-I$(ROOT_PATH)/lib/include  3 LIB=-L$(ROOT_PATH)/lib/lib  4   5 my_json:my_json.o udp_data.o  6     g++ -o $@ $^ $(LIB)  -ljsoncpp  7 %.o:%.cpp  8     g++ -c $< $(INCLUDE)      9 .PHONY:clean 10 clean: 11     rm -f *.o my_json


my_json中编写序列化与反序列化

my_json.h

  1 #include   2 using namespace std;  3 #include "json/json.h"  4 #include   5   6 class my_json  7 {  8 public:  9     my_json(); 10     ~my_json(); 11     static int serialize(string& _out_str,Json::Value& _out_val); 12     static int deserialize(Json::Value& _val,string& _in_str); 13  14 };~

my_json.cpp

 1 #include "my_json.h"  2   3 my_json::my_json()  4 {}  5   6 my_json::~my_json()  7 {}  8   9 int my_json::deserialize(Json::Value& _val,string& _in_str) 10 { 11     Json::Reader _read; 12     if(_read.parse(_in_str,_val,false)) 13     { 14         return 0; 15     } 16     return -1; 17 } 18 int my_json::serialize(string& _out_str,Json::Value& _out_val) 19 { 20 #ifdef _DEBUG_ 21     Json::FastWriter _write; 22     _out_str=_write.write(_out_val); 23 #else 24     Json::StyledWriter _write; 25     _out_str=_write.write(_out_val); 26 #endif 27     return 0; 28 }


udp_data中测试序列化与反序列化

udp_data.h

 1 #include   2 using namespace std;  3 #include   4   5 class udp_data  6 {  7 public:  8     udp_data();  9     ~udp_data(); 10     void to_string(string& name,string &msg,string& school,string& cmd,strin    g& _out_str); 11     void to_value(string& _out_name,string& out_msg,string& out_school,strin    g& out_cmd,string& in_str); 12 protected: 13     string _name; 14     string _msg; 15     string _school; 16     string _cmd; 17 };


udp_data.cpp

 1 #include "udp_data.h"  2 #include "my_json.h"  3 udp_data::udp_data()  4     :_cmd("None")  5 {}  6   7 udp_data::~udp_data()  8 {}  9  10 void udp_data::to_string(std::string& name,std::string& msg,std::string& sch    ool,std::string& cmd,std::string& _out_str) 11 {    12     _name=name; 13     _msg=msg; 14     _school=school; 15     _cmd=cmd; 16     Json::Value root; 17     root["_name"]=_name; 18     root["_msg"]=_msg; 19     root["_school"]=_school; 20     root["_cmd"]=_cmd; 21     my_json::serialize(_out_str,root); 22 } 23  24 void udp_data::to_value(std::string& out_name,std::string& out_msg,std::stri    ng& out_school,std::string& out_cmd,std::string& in_str) 25 { 26     Json::Valueval; 27     my_json::deserialize(val,in_str); 28     out_name=val["_name"].asString(); 29     out_msg=val["_msg"].asString(); 30     out_school=val["_school"].asString(); 31     out_cmd=val["_cmd"].asString(); 32     _name=out_name; 33     _msg=out_msg; 34     _school=out_school; 35     _cmd=out_cmd; 36 } 37  38  39 int main() 40 { 41 //  string out_str; 42     udp_data _data; 43 //  string name="xiaozhi"; 44 //  string msg="hello world"; 45 //  string school="XPU"; 46 //  string cmd="None"; 47 //  _data.to_string(name,msg,school,cmd,out_str); 48 //  cout<

序列化运行结果:

反序列化运行结果:

0