- 序列化与反序列化工具
- 选用原因:
- JSON数据序列化
- JSON数据反序列化
序列化与反序列化工具 选用原因:
JSON for Modern c++在一众c++ json库中算是好用的。
优点:
1.部署简单,单文件hpp,加入项目,include到文件即可。
2.语法清楚,json对象使用起来就如普通对象一般。
3.和stl完美结合,vector,list无需另外处理。
缺点:
1、内存设计冗余,例如int统一默认为int64;
2、执行速度不是特别快;
1.普通数据序列化
json js; // 添加数组 js["id"] = {1,2,3,4,5}; // 添加key-value js["name"] = "zhang san"; // 添加对象 js["msg"]["zhang san"] = "hello world"; js["msg"]["liu shuo"] = "hello china"; // 上面等同于下面这句一次性添加数组对象 js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello china"}}; cout << js << endl; //输出结果{"id":[1,2,3,4,5],msg":{"liu shuo":"hello china","zhang san":"hello world"},"name":"zhang san"}
2.容器序列化
json js; // 直接序列化一个vector容器 vectorvec; vec.push_back(1); vec.push_back(2); vec.push_back(5); js["list"] = vec; // 直接序列化一个map容器 map m; m.insert({1, "黄山"}); m.insert({2, "华山"}); m.insert({3, "泰山"}); js["path"] = m; cout< 强大到直接把C++ STL中的容器内容可以直接序列化成Json字符串,上面代码打印如下:
JSON数据反序列化
{“list”:[1,2,5],“path”:[[1,“黄山”],[2,“华山”],[3,“泰山”]]}当从网络接收到字符串为Json格式,可以用JSON for Modern C++ 直接反序列化取得数据或者直接反序列化出对象,甚至容器,强大无比!
string jsonstr = js.dump(); cout<<"jsonstr:"<v = js2["list"]; for(int val : v) { cout << val << " "; } cout << endl; // 直接反序列化map容器 map m2 = js2["path"]; for(auto p : m2) { cout << p.first << " " << p.second << endl; } cout << endl;