赞
踩
使用json,只需要引入json.hpp头文件即可
在网络中,常用的数据传输序列化格式有XML,Json,ProtoBuf,在公司级别的项目中,大量的在使用
ProtoBuf作为数据序列化的方式,以其数据压缩编码传输,占用带宽小,同样的数据信息,是Json的1/10,XML的1/20,但是使用起来比Json稍复杂一些
- #include"json.hpp"
- using json=nlohmann::json;
- void func1()
- {
- json js;//json对象使用类似容器,类似unordered_map
- js["msg_type"]=2;
- js["from"]="李四";
- js["to"]="老王";
- js["msg"]="你好啊!";
- cout<<js<<endl;
-
- //转成字符串,就可以通过网络发送
- string sendbuff=js.dump();
- cout<<sendbuff.c_str()<<endl;
- }
- void func2()
- {
- json js;
- // 直接序列化一个vector容器
- vector<int> vec;
- vec.push_back(1);
- vec.push_back(2);
- vec.push_back(5);
- js["list"] = vec;
- // 直接序列化一个map容器
- map<int, string> m;
- m.insert({1, "黄山"});
- m.insert({2, "华山"});
- m.insert({3, "泰山"});
- js["path"] = m;
- cout<<js<<endl;
- }
- void func3(){
- json js;
- // 添加数组
- js["id"] = {10,9,8,7,6,5};
- // 添加key-value
- js["name"] = "熊大";
- // 添加对象
- js["msg"]["熊大"] = "你好光头强";
- js["msg"]["熊二"] = "hello china";
- // 上面类似下面这句一次性添加数组对象,不过就像map一样不允许有重复键
- //下面这个会把上面给覆盖掉
- js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello hello"}};
- cout << js << endl;
- }
- int main()
- {
- func1();
- func2();
- func3();
- return 0;
- }
-
对于上面序列化的代码稍加修改,演示反序列化
- //反序列化
- string func4()
- {
- json js;//json对象使用类似容器,类似unordered_map
- js["msg_type"]=2;
- js["from"]="李四";
- js["to"]="老王";
- js["msg"]="你好啊!";
- cout<<js<<endl;
-
- //转成字符串,就可以通过网络发送
- string sendbuff=js.dump();
- return sendbuff;
- }
- string func5(){
- json js;
- // 添加数组
- js["id"] = {10,9,8,7,6,5};
- // 添加key-value
- js["name"] = "熊大";
- // 添加对象
- js["msg"]["熊大"] = "你好光头强";
- js["msg"]["熊二"] = "hello china";
- // 上面类似下面这句一次性添加数组对象,不过就像map一样不允许有重复键
- //下面这个会把上面给覆盖掉
- js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello hello"}};
- string sendbuff=js.dump();
- return sendbuff;
- }
- string func6()
- {
- json js;
- // 直接序列化一个vector容器
- vector<int> vec;
- vec.push_back(1);
- vec.push_back(2);
- vec.push_back(5);
- js["list"] = vec;
- // 直接序列化一个map容器
- map<int, string> m;
- m.insert({1, "黄山"});
- m.insert({2, "华山"});
- m.insert({3, "泰山"});
- js["path"] = m;
- string sendbuff=js.dump();
- return sendbuff;
- }
- int main()
- {
-
- //模拟收到网络传来的
- string recvbuff=func4();
- //数据反序列化 json字符串 -》反序列化 数据对象
- json jsbuff=json::parse(recvbuff);
- cout<<jsbuff["msg_type"]<<endl;
- cout<<jsbuff["from"]<<endl;
- cout<<jsbuff["to"]<<endl;
- cout<<jsbuff["msg"]<<endl;
-
- string recvbuff1=func5();
- json msgbuff=json::parse(recvbuff1);
- cout<<msgbuff["id"]<<endl;
- auto arr=msgbuff["id"];
- for(auto x:arr){
- cout<<x<<"---";
- }
- cout<<endl;
-
- string recvbuff2=func6();
- json vvmapbuff=json::parse(recvbuff2);
- vector<int>vv=vvmapbuff["list"]; //数组
- for(auto &x:vv){
- cout<<x<<"....";
- }
- cout<<endl;
- map<int, string> mp=vvmapbuff["path"]; //map
- for(auto &x:mp){
- cout<<x.first<<"/"<<x.second<<"***";
- }
- cout<<endl;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。