用多少眼泪才能让你相信 发表于 2024-11-19 02:00:18

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即可
https://i-blog.csdnimg.cn/direct/59edab12eb684db6b0f5db68ed4e5b3a.png
//   __ _____ _____ _____
//__||   __|   |   | |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);
}





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C++【nlohmann/json】库序列化与反序列化