赞
踩
后面进行的一个项目需要JSON,用在网络通信中传递数据
Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。
具有以下特点
#include "json.hpp"
using json = nlohmann::json;
就是把我们想要打包的数据,或者对象,直接处理成Json字符串。
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;
上面js对象的序列化结果是:
{"id":[1,2,3,4,5],msg":{"liu shuo":"hello china","zhang san":"hello world"},"name":"zhang
san"}
当从网络接收到字符串为Json格式,可以用JSON for Modern C++ 直接反序列化取得数据或者直接反序列化出对象,甚至容器,强大无比!
string jsonstr = js.dump(); cout<<"jsonstr:"<<jsonstr<<endl; // 模拟从网络接收到json字符串,通过json::parse函数把json字符串专程json对象 json js2 = json::parse(jsonstr); // 直接取key-value string name = js2["name"]; cout << "name:" << name << endl; // 直接反序列化vector容器 vector<int> v = js2["list"]; for(int val : v) { cout << val << " "; } cout << endl; // 直接反序列化map容器 map<int, string> m2 = js2["path"]; for(auto p : m2) { cout << p.first << " " << p.second << endl; } cout << endl;
施磊.集群聊天服务器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。