美文网首页
Json反序列化成cpp

Json反序列化成cpp

作者: e196efe3d7df | 来源:发表于2021-03-11 16:22 被阅读0次

    在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

    相关文章

      网友评论

          本文标题:Json反序列化成cpp

          本文链接:https://www.haomeiwen.com/subject/pdqoqltx.html