当前位置: 首页 > article >正文

C++【nlohmann/json】库序列化与反序列化

1.nlohmann/json官方网站

GitHub - nlohmann/json: JSON for Modern C++

Overvew - JSON for Modern C++

上述是点击就进入,下面的是要自己粘

https://github.com/nlohmann/json
https://json.nlohmann.me/api/basic_json/

 2.使用过的nlohmann/json官方中的某版本代码

  • 使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可

//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT

3.nlohmann库的序列化与反序列化简单使用demo

发送方:C++对象转json对象,将json对象转json字符串,然后以字节流发过来;

接收方:需对字节流转成 string类型(json字符串)->使用json::parse转成json对象(json对象根据双方信号协议定义多种id->赋值给自定义的C++对象

项目思想:发送和接收端中间定义复用的nlohmann::json::number_integer_t id(枚举结构体)

namespace Linshi {
// NLOHMANN_DEFINE_TYPE_INTRUSIVE(key,成员,成员);
// 头文件中定义序列化与反序列化使用的结构体
struct Test {
    int type;
    int color;
    int id;
    std::vector<std::pair<double, double>> point;

    NLOHMANN_DEFINE_TYPE_INTRUSIVE(Test , type, color, id, point);
};

struct Tests {
    std::vector<Test> tests;

    NLOHMANN_DEFINE_TYPE_INTRUSIVE(Tests , tests);
};  }

// 头文件搞个模板/或者直接使用json成员函数进行序列、反序列

// 序列化
const Linshi::Test test_js = {}; // 自定义C++对象初始值
nlohmann::json json_obj(test_js); // json对象赋值方式1
json_obj = {{"type",test_js.type},{"color",test_js.color},{"关键字成员",成员C++值}};//赋值方式1
std::string json_str = json_obj.dump();

// 反序列化
{
// const char* msg 假设是Tests 的json字符串
nlohmann::json json_obj_ = nlohmann::json::parse(msg); 
// at入参关键字进行解析json,at函数在json库有两种:非常量和常量JSON 对象
Linshi::Test test_obj = json_obj_.at(Tests).at(Test);
Linshi::Tests tests_obj = json_obj_.at(Tests); 
}




http://www.kler.cn/a/399523.html

相关文章:

  • 【汇编】c++游戏开发
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • C++析构函数详解
  • Linux:进程的优先级 进程切换
  • 详细分析ip addr show 查看网络配置的命令
  • AUTOSAR_EXP_ARAComAPI的7章笔记(5)
  • ALSA - (高级Linux声音架构)是什么?
  • ShardingSphere 如何完美驾驭分布式事务与 XA 协议?
  • HTTP常见的状态码有哪些,都代表什么意思
  • DB_redis数据一致性(三)
  • web3+web2安全/前端/钱包/合约测试思路——尝试前端绕过直接上链寻找漏洞
  • @bytemd/vue-next Markdown编辑器的使用
  • Linux下MySQL的简单使用
  • 定时器(QTimer)与随机数生成器(QRandomGenerator)的应用实践——Qt(C++)
  • Linux中的挂载
  • vue 自定义指令( 全局自定义指令 | 局部自定义指令 )
  • 深度学习之GAN的生成能力评价
  • Windows C++ TCP/IP 两台电脑上互相传输字符串数据
  • 【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1
  • 数据驱动的期货市场决策:民锋科技的量化分析创新
  • Python 小高考篇(4)循环语句
  • web——upload-labs——第三关——后缀黑名单绕过
  • main中的int argc, char* argv[],命令行调用函数时输入参数用的
  • Ubuntu24.04LTS在线安装Docker引擎
  • Qt---双缓冲绘图
  • Golang | Leetcode Golang题解之第565题数组嵌套