QT中存储数据到json文件中

参考文章:

https://blog.csdn.net/weixin_43729127/article/details/127522889

https://www.jb51.net/article/265575.htm

上代码:

从json文件中读取内容保存到map数据结构中

void Frange::JsonToMap(){

    //todo::if json not exit ,crete one
    //QFile file("C:/Users/user/Documents/FringeControl/recipes.json");    //创建QFile对象,并指定json文件路径
    QFile file(QDir::currentPath());
    if(!file.open(QIODevice::ReadOnly)){
        std::cout<<" open json filed "<<std::endl;
        return;
    }
    //将文件内容读取到数组中
    QByteArray data(file.readAll());
    file.close();    //关闭文件

    QJsonParseError jError;    //创建QJsonParseError对象
    //使用QJsonDocument的fromJson函数读取json串,并将QJsonParseError对象传入获取错误值
    QJsonDocument jDoc = QJsonDocument::fromJson(data, &jError);
    //判断QJsonParseError对象获取的error是否包含错误,包含则返回0
    if(jError.error != QJsonParseError::NoError){
        std::cout<<"open json filed too "<<std::endl;
        return ;
    }
    std::cout<<"open json success too "<<std::endl;

    QJsonObject jObj = jDoc.object();
    Recipe cur_rcp;

    if(jObj.size())
    {
        int modeNum = jObj.size();
        int count = 0;

        QStringList names = jObj.keys();

        std::cout<<"recipes modenum is "<<modeNum<<std::endl;
        //循环读取json外圈大循环mode
        for(const auto& rcp : jObj)
        {
            QJsonObject obj2 = rcp.toObject();

            cur_rcp.name = names.at(count);
            std::string str = cur_rcp.name.toStdString();
            //std::cout<<"cur rcp name is "<<str.c_str()<<std::endl;

            cur_rcp.level = obj2["level"].toInt();
            //std::cout<<"cur rcp level is "<<cur_rcp.level<<std::endl;

            cur_rcp.amplitude = obj2["amplitude"].toInt();
            //std::cout<<"cur rcp amplitude is "<<cur_rcp.amplitude<<std::endl;

            cur_rcp.angle = obj2["angle"].toInt();
            //std::cout<<"cur rcp angle is "<<cur_rcp.angle<<std::endl;

            cur_rcp.time = obj2["time"].toInt();
            //std::cout<<"cur rcp Time is "<<cur_rcp.Time<<std::endl;

            cur_rcp.phase = obj2["phase"].toInt();
            //std::cout<<"cur rcp phase is "<<cur_rcp.phase<<std::endl;

            cur_rcp.spacing = obj2["spacing"].toInt();
            //std::cout<<"cur rcp spacing is "<<cur_rcp.spacing<<std::endl;

            m_savedrecips.insert(std::pair<QString, Recipe>(cur_rcp.name, cur_rcp));

            cur_rcp.Clear();
            count++;
        }

        std::cout<<"read json end,now there are "<<m_savedrecips.size()<<" recipes "<<std::endl;
    }

}

从数据结构中存储数据到json

void Frange::MapToJson(){

    if(m_savedrecips.size() < 1){
        std::cout<<"recipes is null"<<std::endl;

        QJsonObject jObj;
        QJsonDocument doc(jObj);
        QByteArray data = doc.toJson();
        QFile file("C:/Users/user/Documents/FringeControl/recipes.json");
        file.open(QIODevice::WriteOnly);//打开文件
        file.write(data);//开始写入数据进去
        file.close();
        return;
    }

    QJsonObject jObj;

    for(auto& rcp : m_savedrecips){

        QJsonObject obj;
        obj.insert("level",rcp.second.level);
        obj.insert("phase", rcp.second.phase);
        obj.insert("angle", rcp.second.angle);
        obj.insert("spacing", rcp.second.spacing);
        obj.insert("time", rcp.second.time);
        obj.insert("amplitude", rcp.second.amplitude);
        //数组中元素添加完成后将其添加到根对象中
        jObj.insert(rcp.first, QJsonValue(obj));

    }

    QJsonDocument doc(jObj);
    QByteArray data = doc.toJson();
    QFile file("C:/Users/user/Documents/FringeControl/recipes.json");
    file.open(QIODevice::WriteOnly);//打开文件
    file.write(data);//开始写入数据进去
    file.close();

    std::cout<<"Map to json, now are "<<m_savedrecips.size()<<std::endl;

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值