Json反序列化成cpp

2021-03-11  本文已影响0人  e196efe3d7df

在c++中使用json,少不了要找一个合适的序列化工具,nlohmann/json这个轮子,我就不多说了,用过的都说好。
虽然轮子已经有了,在实际使用中还会遇到很多不便。比如:你在json中改了数据结构,你就要重新修改你的序列化和反序列化逻辑,这就很恶心。如果有工具可以把json中的数据生成对应的c++数据结构,并且自动生成序列化和反序列化的代码,那该多好。搜了一圈,没有找到合适的工具,就准备自己撸一套。

工具说明

我这套工具,可根据json文件自动生成c++数据结构,自动生成序列化和反序列化代码,配合nlohmann/json,用起来很是方便。

工具示例

工具使用

//根据 alg_param_setting.json 自动生成的 alg_param_setting.h
#include "output\alg_param_setting.h"
#include <fstream>
#include <iostream>
#include <iomanip>

using namespace alg_param_setting;
using nlohmannJson = nlohmann::json;

QFile originJsonFile(QDir::currentPath() + QString::fromStdWString(L"/json/alg_param_setting.json"));
if (!originJsonFile.open(QIODevice::ReadOnly))
    return;
QByteArray originJsonPlainText = originJsonFile.readAll();
originJsonFile.close();

//先把json文件解析出来
auto jsonObject = nlohmannJson::parse(originJsonPlainText.toStdString());

//只需简单一句代码,即可进行反序列化
auto p2 = jsonObject.get<struct_alg_param_setting>();
/*
...
可任意修改数据
*/
//只需简单一句代码,即可进行序列化
nlohmannJson p3 = p2;

//写入本地
std::ofstream o(QDir::currentPath().toStdString() + "/pretty.json");
o << std::setw(4) << p3 << std::endl;
o.close()

用起来简单方便!

后续

在实际使用过程中,只能改查,不能增删!因为c++的数据结构一旦生成,就无法进行增加和删除, 稍微有些遗憾!如果过度包装的话,还不如直接使用nlohmann/json

工程示例:https://github.com/bingxue102685/JsonToCpp

上一篇 下一篇

猜你喜欢

热点阅读