項目之——利用json實現序列化與反序列化

comm目錄下的另外幾個文件

使用了開源的庫jsoncpp,可下載。

(1)my_json.h

  1 #include<iostream>
  2 #include<unistd.h>
  3 #include<string>
  4 #include "json/json.h"
  5 
  6 class my_json
  7 {
  8 public:
  9     my_json();
 10     ~my_json();
 11     static int serialize(Json::Value& _val,std::string& _out_str);
 12     static int deserialize(Json::Value& _val,std::string& _in_str);
 13 private:
 14     Json::Value val;
 15     std::string str;
 16 };

(2)my_json.cpp

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

(3)udp_data.h

  1 #include<iostream>
  2 #include<string>
  3 #include "json/json.h"
  4 #include "my_json.h"
  5 class udp_data
  6 {
  7 public:
  8 //  udp_data(std::string _nick_name,std::string _msg,std::string _school,std::string _cmd);
  9     udp_data();
 10     ~udp_data();
 11     void to_string(std::string _in_nick_name,std::string _in_msg,std::string _in_school,std::string _in_cmd,std::string &_out_string);
 12 //void to_value(std::string& _out_nick_name,std::string& _out_msg,std::string& _out_school,std::string& _out_cmd,std::string& _in_string);
 13 void to_value(std::string& _in_string);
 14 private:
 15     std::string nick_name;
 16     std::string msg;
 17     std::string school;
 18     std::string cmd;
 19 };

(4)udp_data.cpp

  1 #include "udp_data.h"
  2 
  3 //udp_data::udp_data(std::string _nick_name,std::string _msg,std::string _school,std::string _cmd)
  4 //  :nick_name(_nick_name)
  5 //  ,msg(_msg)
  6 //  ,school(_school)
  7 //  ,cmd(_cmd)
  8 //{}
  9 
 10 udp_data::udp_data()
 11 {}
 12 
 13 udp_data::~udp_data()
 14 {}
 15 void udp_data::to_string(std::string _in_nick_name,std::string _in_msg,std::string _in_school,std::string _in_cmd,std::string& _out_string)
 16 {
 17     nick_name=_in_nick_name;
 18     msg=_in_msg;
 19     school=_in_school;
 20     cmd=_in_cmd;
 21 
 22     Json::Value root;
 23     root["nick_name"]=nick_name;
 24     root["msg"]=msg;
 25     root["school"]=school;
 26     root["cmd"]=cmd;
 27 
 28     my_json::serialize(root,_out_string);
 29 }
 30 //void udp_data::to_string(std::string& _out_string)
 31 //{
 32 //  Json::Value root;
 33 //  root["nick_name"]=nick_name;
 34 //  root["msg"]=msg;
 35 //  root["school"]=school;
 36 //  root["cmd"]=cmd;
 37 //  my_json::serialize(root,_out_string);
 38 //}
 39 
 40 //void udp_data::to_value(std::string& _out_nick_name,std::string& _out_msg,std::string& _out_school,std::string& _out_cmd,std::string& _in_string)
 41 //{
 42 //  Json::Value val;
 43 //  my_json::deserialize(_in_string,val);
 44 //
 45 //  _out_nick_name=val["nick_name"].asString();
 46 //  _out_msg=val["msg"].asString();
 47 //  _out_school=val["school"].asString();
 48 //  _out_cmd=val["cmd"].asString();
 49 //
 50 //  nick_name=_out_nick_name;
 51 //  msg=_out_msg;
 52 //  school=_out_school;
 53 //  cmd=_out_cmd;
 54 //}
 55 
 56 void udp_data::to_value(std::string& _in_string)
 57 {
 58     Json::Value val;
 59     my_json::deserialize(val,_in_string);
 60 
 61     nick_name=val["nick_name"].asString();
 62     msg=val["msg"].asString();
 63     school=val["school"].asString();
 64     cmd=val["cmd"].asString();
 65 
 66     std::cout<<"nick_name:"<<nick_name<<std::endl;
 67     std::cout<<"msg:"<<msg<<std::endl;
 68     std::cout<<"school:"<<school<<std::endl;
 69     std::cout<<"cmd:"<<cmd<<std::endl;
 70 }
 71 
 72 //void udp_data::to_value(std::string& _in_string)
 73 //{
 74 //  Json::Value val;
 75 //  my_json::deserialize(_in_string,val);
 76 //}
 77 int main()
 78 {
 79     udp_data _data;
 80 //  std::string out_string;
 81 //  _data.to_string("luu","beautiful","XPU","dancing",out_string);
 82 //  std::cout<<out_string;
 83 
 84 //  std::string in_string="{luu beautiful XPU dancing}";
 85     std::string in_string="{\"cmd\":\"dancing\",\"msg\":\"beautiful\",\"nick_name\":\"luu\",\"school\":\"XPU\"}";
 86     _data.to_value(in_string);
 87     return 0;
 88 }

//makefile

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

輸出結果:

(1)序列化

wKiom1eEUPbBfeE3AAAZdRn2l84765.png

(2)反序列化

wKiom1eEUTSg1WOMAAAcQCsDQQA789.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章