基于websocket的多用户网页五子棋(二)
一.前期回顾
对于前面内容不太了解的,可以去看一看项目一
https://blog.csdn.net/weixin_60668256/article/details/152404354?fromshare=blogdetail&sharetype=blogdetail&sharerId=152404354&sharerefer=PC&sharesource=weixin_60668256&sharefrom=from_link
二.JsonCpp的介绍和使用
1.JsonCpp的介绍
2.JsonCpp的序列化
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <jsoncpp/json/json.h>//使用jsoncpp库进行多个数据对象的序列化int main()
{//1. 将需要进行序列化的数据,存储在Json::Value对象中Json::Value root;root[" 姓名 "] = "小明";root[" 年龄 "] = 18;root[" 成绩 "].append(98);root[" 成绩 "].append(88.5);root[" 成绩 "].append(78.5);//2. 实例化一个StreamWriterBuilder工厂类对象Json::StreamWriterBuilder swb;//3. 通过StreamWriterBuilder工厂类对象生产一个StreamWriter对象Json::StreamWriter* sw = swb.newStreamWriter();//4. 使用StreamWriter对象,对Json::Value中存储的数据进行序列化std::stringstream ss;int ret = sw->write(root,&ss);if(ret != 0){std::cout << "json serialize failed!!!" << std::endl;return -1;}std::cout << ss.str() << std::endl;delete sw;return 0;
}
3.JsonCpp的反序列化
void Unserialize(const std::string& str)
{//1.构建一个CharReaderBuilder工厂类Json::CharReaderBuilder crb;//2.使用CharReaderBuilder工厂类,生产出一个CharReader对象Json::CharReader *cr = crb.newCharReader();//3.定义一个Json::Value对象用于存储解析后的数据Json::Value root;std::string err;//4.使用CharReader对象进行Json格式字符串str的反序列化//parse(char* start,char* end,Json::Value* val,string* err);bool ret = cr->parse(str.c_str(),str.c_str() + str.size(),&root,&err);if(ret == false){std::cout << "json unserialize failed: " << err << std::endl;return;}//5.逐个元素去访问Json::Value中的数据std::cout << "姓名: " << root[" 姓名 "].asString() << std::endl;std::cout << "年龄: " << root[" 年龄 "].asInt() << std::endl;int sz = root[" 成绩 "].size();for(int i = 0;i < sz;i++){std::cout << "成绩: " << root[" 成绩 "][i].asFloat() << std::endl;}delete cr;
}
综合代码如下:
"json.cpp"#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <jsoncpp/json/json.h>//使用jsoncpp库进行多个数据对象的序列化std::string Serialize()
{//1. 将需要进行序列化的数据,存储在