官方网站的必要性,w9y6新域名,建设农产品网络营销网站,wordpress个人博客主题绪论
最近因为项目的需要#xff0c;需要对JSON进行一定的数据处理#xff0c;因为想要用C进行编码#xff0c;便对C的JSON库进行的调研#xff0c;发现这个库比较好用#xff1a;JSON for Morder C。
使用指南
想要使用这个json库#xff0c;只需要在源文件中包含jso…绪论
最近因为项目的需要需要对JSON进行一定的数据处理因为想要用C进行编码便对C的JSON库进行的调研发现这个库比较好用JSON for Morder C。
使用指南
想要使用这个json库只需要在源文件中包含json.hpp头文件然后就可以使用nlohmann::json对象啦非常地简单不需要添加动态库什么的。
序列化
测试代码
void test_json_serialization() {using json nlohmann::json;json js;js[msg_type] 2; //值可以是任意内置类型js[from] zhang san;js[to] li si;js[msg] Hello, how are you?;js[id] {1, 2, 3, 4, 5}; //值可以是数组js[msg1][zhang san] I am zhang san;js[msg1][li si] I am li si;//等价于下面的写法支持对同一个键值重复写入js[msg1] {{zhang san, I am zhang san}, {li si, I am li si}};//支持直接用容器给json赋值json对象指向一个数组js[list] std::vectorint{1,2,3};//如果给json赋值map对象不会产生map对象而是产生一个数组//每个数组的元素仍然是一个子数组这个子数组中有两个元素分别是map对象的键和值js[path1] std::mapint,std::string{{1,map1}, {2,map2}};js[path2] std::unordered_mapint,std::string{{1,unordered_map1}, {2,unordered_map2}};std::string s js.dump(); //转储成字符串 可以使用dump(4)进行缩进edward::print(s);
}运行结果 {“from”:“zhang san”, “id”:[1,2,3,4,5], “list”:[1,2,3], “msg”:“Hello, how are you?”, “msg1”:{“li si”:“I am li si”,“zhang san”:“I am zhang san”}, “msg_type”:2, “path1”:[[1,“map1”],[2,“map2”]], “path2”:[[2,“unordered_map2”],[1,“unordered_map1”]], “to”:“li si”} 反序列化
测试代码
void test_json_deserialization(const std::string buf) {using json nlohmann::json;json js json::parse(buf);edward::print(msg_type:, js[msg_type]);edward::print(from:, js[from]);edward::print(to:, js[to]);edward::print(msg:, js[msg]);edward::print(id:, js[id]);edward::printArr(js[id].begin(), js[id].end());edward::print(msg1:, js[msg1]);edward::print(msg1[\zhang san\]:, js[msg1][zhang san]);std::vectorint list js[list];std::mapint, string path1 js[path1];std::unordered_mapint, string path2 js[path2];edward::printArr(list);edward::printArr(path1);edward::printArr(path2);
}运行结果 msg_type: 2 from: “zhang san” to: “li si” msg: “Hello, how are you?” id: [1,2,3,4,5] 1 2 3 4 5 msg1: {“li si”:“I am li si”,“zhang san”:“I am zhang san”} msg1[“zhang san”]: “I am zhang san” 1 2 3 1 map1 2 map2 1 unordered_map1 2 unordered_map2 其中的print函数和printArr函数都放在我自己的一个工具库中。详见我的博客C 工具函数库 如果还想了解更多的细节可以去github上学习更多内容。
源码解析
看到一个大神对这个库实现细节的解析最近也恰好在学习模板插个眼我以后也研究一下这个库的源码C 常用库 —— JSON for Modern C