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"
相关推荐
*愿风载尘*40 分钟前
ksql连接数据库免输入密码交互
数据库·后端
溟洵1 小时前
Qt 窗口 工具栏QToolBar、状态栏StatusBar
开发语言·前端·数据库·c++·后端·qt
ppo921 小时前
MCP简单应用:使用SpringAI + Cline + DeepSeek实现AI创建文件并写入内容
人工智能·后端
创码小奇客1 小时前
Talos 使用全攻略:从基础到高阶,常见问题一网打尽
java·后端·架构
Re2751 小时前
ThreadLocal 入门:搞懂线程私有变量
后端
midsummer_woo2 小时前
基于spring boot的纺织品企业财务管理系统(源码+论文)
java·spring boot·后端
zc-code2 小时前
Spring Boot + @RefreshScope:动态刷新配置的终极指南
java·spring boot·后端
何中应2 小时前
EasyExcel使用(二:写出)
java·后端·maven·excel
苏三说技术3 小时前
千万级的大表如何新增字段?
后端
外滩运维专家3 小时前
后端开发必备:生产环境异常自动电话通知方案
后端·程序员