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"
相关推荐
章豪Mrrey nical17 小时前
前后端分离工作详解Detailed Explanation of Frontend-Backend Separation Work
后端·前端框架·状态模式
派大鑫wink18 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
程序员爱钓鱼18 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
xUxIAOrUIII18 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home19 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
zfj32119 小时前
go为什么设计成源码依赖,而不是二进制依赖
开发语言·后端·golang
weixin_4624462319 小时前
使用 Go 实现 SSE 流式推送 + 打字机效果(模拟 Coze Chat)
开发语言·后端·golang
JIngJaneIL19 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
小信啊啊19 小时前
Go语言切片slice
开发语言·后端·golang
Victor35621 小时前
Netty(20)如何实现基于Netty的WebSocket服务器?
后端