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 [email protected] $^ $(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 }

序列化运行结果:

反序列化运行结果:

时间: 2024-08-25 15:53:13

UDP畅聊系统数据的序列化与反序列化的相关文章

UDP畅聊系统简单版本

带有数据存储的模型图 总体的框架 server中 udp_server.h 其中add_user函数为添加新上线用户信息  1 #pragma once   2 #include <iostream>   3 #include <map>   4 using namespace std;   5 #include "data_pool.h"   6 #include <pthread.h>   7 #include <stdlib.h>

Json数据的序列化与反序列化的三种常用方法介绍

以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待... 本文主要介绍在Json数据的序列化与反序列化的过程中我经常用到的三种工具的基本使用方法,及其他们之间 的比较...希望能够对读者们有一些帮助... 这里介绍到的三种解析与生成Json数据的方法分别是:标准JSON解析与生成方法.使用gson解析与生成JSON数据 .使用fastJsson解析与生成JSON数据. 首先,这些工具都可以到

Python 中数据的序列化和反序列化(json处理)

概念: JSON(JavaScript Object Notation):是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等). 这些

JS实现Ajax,Josn数据的序列化和反序列化---例: 省市区联动(包含get,post)

服务器端相应JOSN数据   用到序列化和反序列化----命名空间using System.Web.Script.Serialization; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //获取请求的参数 string id = context.Request["id"].ToString(); //通过参数查询父级id

C# 编写通用的JSON数据进行序列化和反序列化

注意事项:使用JSON系列化和反系列化,必须要添加引用System.Runtime.Serialization. 1.通用类代码如下: /// <summary>    /// JSON序列化和反序列化辅助类    /// </summary>    public class JsonHelper    {        /// <summary>        /// JSON序列化        /// </summary>        /// <

fastjson生成和解析json数据,序列化和反序列化数据

本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>) 2.通过一个android程序测试fastjson的用法. fastjson简介: Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack

C# 使用Json.NET对数据进行序列化和反序列化 | c# json serialize and deserialize using json.net JsonConvert

本文首发于个人博客https://kezunlin.me/post/22391aa3/,欢迎阅读最新内容! c# json serialize and deserialize using json.net JsonConvert Guide Json.NET JsonConvert.SerializeObject JsonConvert.DeserializeObject install Use NuGet to download the package "Project" ->

ASP.NET 中JSON 的序列化和反序列化

JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介: JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号''{}'

ASP.NET中JSON的序列化和反序列化

ASP.NET中JSON的序列化和反序列化 JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理.     一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是