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 <iostream>
2 using namespace std;
3 #include "json/json.h"
4 #include <string>
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 <iostream>
2 using namespace std;
3 #include <string>
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::Value val;
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<<out_str<<endl;
49 string _in_str="{\"_name\":\"xiaozhi\",\"_msg\":\"hello world\",\"_schoo l\":\"XPU\",\"_cmd\":\"None\"}";
50 string out_name;
51 string out_msg;
52 string out_school;
53 string out_cmd;
54 _data.to_value(out_name,out_msg,out_school,out_cmd,_in_str);
55 cout<<out_name<<endl;
56 cout<<out_msg<<endl;
57 cout<<out_school<<endl;
58 cout<<out_cmd<<endl;
59 //cout<<out_str<<endl;
60 return 0;
61 }
序列化运行结果:
反序列化运行结果:
转载于:https://blog.51cto.com/10541559/1812365