集群聊天服务器(2)Json介绍
目录
- Json序列化
- Json反序列化
大家之间交流用json,想要发送数据,就把数据序列化成json,想要接收数据,就反序列化成自己程序的语言。
Json序列化
可以直接赋值一个容器对象
js[‘xx’]=vec;
#include "json.hpp"
using json=nlohmann::json;
#include <iostream>
#include <vector>
#include <map>
using namespace std;
//json序列化示例1
void func1(){
json js;
js["msg_type"]=2;
js["from"]="zhang san";
js["to"]="li si";
js["msg"]="hello,what are you doing now?";
cout<<js<<endl;
}
int main(){
func1();
return 0;
}
转成字符串,就可以通过网络发送
#include "json.hpp"
using json=nlohmann::json;
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
//json序列化示例1
void func1(){
json js;
js["msg_type"]=2;
js["from"]="zhang san";
js["to"]="li si";
js["msg"]="hello,what are you doing now?";
string sendBuf=js.dump();
cout<<sendBuf.c_str()<<endl;
}
int main(){
func1();
return 0;
}
还可以放数组,json形式还可以像是二维数组一样,键值对里面套键值对
#include "json.hpp"
using json=nlohmann::json;
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
//json序列化示例1
void func1(){
json js;
js["id"]={1,2,3,4,5};
js["msg_type"]=2;
js["from"]="zhang san";
js["to"]="li si";
js["msg"]["zhang san"]="hello world";
js["msg"]["liu shuo"]="hello china";
cout<<js<<endl;
}
int main(){
func1();
return 0;
}
Json反序列化
#include "json.hpp"
using json=nlohmann::json;
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
//json序列化示例1
void func1(){
json js;
js["id"]={1,2,3,4,5};
js["msg_type"]=2;
js["from"]="zhang san";
js["to"]="li si";
js["msg"]["zhang san"]="hello world";
js["msg"]["liu shuo"]="hello china";
cout<<js<<endl;
}
string func2(){
json js;
js["id"]={1,2,3,4,5};
js["msg_type"]=2;
js["from"]="zhang san";
js["to"]="li si";
js["msg"]["zhang san"]="hello world";
js["msg"]["liu shuo"]="hello china";
string sendBuf=js.dump();
return sendBuf;
}
int main(){
string recvBuf=func2();
//数据的反序列化
json jsbuf=json::parse(recvBuf);//返回一个json对象
cout<<jsbuf["msg_type"]<<endl;
cout<<jsbuf["from"]<<endl;
cout<<jsbuf["to"]<<endl;
cout<<jsbuf["msg"]<<endl;
return 0;
}
json.hpp非常轻量,比任何第三方库都好用。做json的序列化和反序列化,能够直接将stl容器和json画等号。