在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。
网友评论