JSON序列化与反序列化-----使用JSON for Modern C++库

使用的三方库

JSON for Modern C++ 是一款优秀的在C++下使用的JSON库,我们使用这个三方库测试JSON的序列化和反序列化。

特点

  • 整个代码由一个头文件json.hpp组成,没有子项目,没有依赖,没有复杂的构建系统,使用起来非常方便。
  • STL和JSON容器之间可以相互转化。

项目地址

github.com/nlohmann/js...

使用

就像前面介绍的一样, 这个三方库只包含一个hpp文件,我们在项目中引入即可

下载github.com/nlohmann/js...

JSON的序列化

测试代码一

cpp 复制代码
#include <iostream>
#include <vector>
#include <map>
#include <string>

#include "json.hpp"

using namespace std;
using json = nlohmann::json;

// JSON序列化示例1
void func1() {
  json js;
  js["msg_type"] = 2;
  js["from"] = "zhangsan";
  js["to"] = "lisi";
  js["content"] = "hello lisi, I'm zhangsan";

  string str = js.dump(); // 获取字符串

  cout << str.c_str() << endl;  // string转char*输出,通过网络就可以发送了
}

int main() {

  func1();
  return 0;
}

运行输出结果

sh 复制代码
{"id":[1,2,3,4,5],"info":{"age":18,"gender":"male"},"name":"zhangsan"}

测试代码二

cpp 复制代码
#include <iostream>
#include <vector>
#include <map>
#include <string>

#include "json.hpp"

using namespace std;
using json = nlohmann::json;

void func2() {
  json js;
  // 添加数组
  js["id"] = {1, 2, 3, 4, 5};
  // 添加key-value
  js["name"] = "zhangsan";
  js["info"]["height"] = 175;
  js["info"]["weight"] = 65;
  // 添加map,一次性添加多个,相同键,后面的会覆盖前面的
  js["info"] = {{"age", 18}, {"gender", "male"}};

  string str = js.dump(); // 获取字符串

  cout << str.c_str() << endl;  // string转char*输出,通过网络就可以发送了
}

int main() {

  func2();
  return 0;
}

运行输出结果

sh 复制代码
{"id":[1,2,3,4,5],"info":{"age":18,"gender":"male"},"name":"zhangsan"}

测试代码三

cpp 复制代码
#include <iostream>
#include <vector>
#include <map>
#include <string>

#include "json.hpp"

using namespace std;
using json = nlohmann::json;


void func3() {
  json js;
  // 直接序列化一个vector容器
  vector<int> v = {1, 2, 3, 4, 5};
  js["id"] = v;

  // 直接序列化一个map容器
  map<string, int> m = {{"age", 18}, {"gender", 1}};
  js["info"] = m;

  string str = js.dump(); // 获取字符串

  cout << str.c_str() << endl;  // string转char*输出,通过网络就可以发送了
}

int main() {

  func3();
  return 0;
}

运行输出结果

sh 复制代码
{"id":[1,2,3,4,5],"info":{"age":18,"gender":1}}

JSON的反序列化

代码

cpp 复制代码
#include <iostream>
#include <vector>
#include <map>
#include <string>

#include "json.hpp"

using namespace std;
using json = nlohmann::json;

// JSON序列化示例1
string func1() {
  json js;
  js["msg_type"] = 2;
  js["from"] = "zhangsan";
  js["to"] = "lisi";
  js["content"] = "hello lisi, I'm zhangsan";

  string str = js.dump(); // 获取字符串

  return str;
}


int main() {

  string recvStr = func1();

  // 数据的反序列化
  json jsbuf = json::parse(recvStr);

  cout << jsbuf["msg_type"] << endl;
  cout << jsbuf["from"] << endl;
  cout << jsbuf["to"] << endl;
  cout << jsbuf["content"] << endl;

  return 0;
}

测试

sh 复制代码
➜  json_test ./main 
2
"zhangsan"
"lisi"
"hello lisi, I'm zhangsan"
相关推荐
SamChan908 分钟前
用Python+Requests批量翻译PDF:从脚本到调度
后端·python·microsoft·ai·pdf·机器翻译
zyplayer-doc8 小时前
VuePress类静态文档站和动态知识库怎么选:两种技术路线的适用场景
javascript·人工智能·后端·安全·智能手机
用户938515635079 小时前
从前后端分离到前端接口工程:React + MockJS + Vite 解析
前端·后端·全栈
码事漫谈10 小时前
世界由什么构成——这个问题比你想的更缠人
后端
摇滚侠10 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
山荷枝11 小时前
03-框架--Spring
java·后端·spring
ChaHae-In11 小时前
SpringBoot统一功能处理
java·spring boot·后端
65岁退休Coder13 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain