QT中QJsonObject类、QJsonDocument类的使用(Json文档的读取与写入)

1.读取Json文档中的值:(代码如下)

QString getJsonParas(QString path, QString firstFlag, QString secondFlag,int index)
{
    QString paras="";
    QFile file(path);
    if (!file.open(QIODevice::ReadOnly)){
        qDebug()<<"file.open  ReadOnly   fail";
        return "";
    }
    //从json文件读取信息
   QByteArray allData=file.readAll();
   file.close();
   //qDebug()<<allData;
   QJsonParseError json_error;
   QJsonDocument jsonDoc;
   jsonDoc=QJsonDocument::fromJson(allData, &json_error);
   if(json_error.error != QJsonParseError::NoError)
      {
           qDebug() << "json error!";
           qDebug()<<json_error.errorString();
           return paras;
       }
     QJsonObject rootObj = jsonDoc.object();
     QStringList keys = rootObj.keys();
     if(rootObj.contains(firstFlag)){
         QJsonObject subObj=rootObj.value(firstFlag).toObject();
         if(subObj.contains(secondFlag)){
             if(!subObj.value(secondFlag).isObject()){
                  return subObj.value(secondFlag).toString();
             }
         }
     }
     else{

         for(int i=0;i<keys.size();i++){
            QString flag =keys.at(i);
            QJsonObject subObj=rootObj.value(flag).toObject();
            QStringList keyss=subObj.keys();
            if(subObj.contains(firstFlag)){
                QJsonArray exchanges=subObj.value(firstFlag).toArray();
                QJsonObject exchange=exchanges.at(0).toObject();
                if(!exchange.value(secondFlag).isArray()){
                    return exchange.value(secondFlag).toString();
                }
              }
//            else{
//                for(int j=0;j<keyss.size();j++){
//                    QString flagkey=keyss.at(j);
//                    QJsonObject subObjs=rootObj.value(flagkey).toObject();
//                    if(subObjs.contains(firstFlag)){
//                        QJsonArray queues=subObjs.value(firstFlag).toArray();
//                        QJsonObject queue=queues.at(index).toObject();
//                        return queue.value(secondFlag).toString();
//                    }
//                }
//            }
         }
         //
         QJsonObject subObj=rootObj.value("virtualhost").toObject();
         QJsonArray exchanges=subObj.value("exchanges").toArray();
         QJsonObject exchange=exchanges.at(0).toObject();
         if(exchange.contains(firstFlag)){
         QJsonArray queues=exchange.value(firstFlag).toArray();
         QJsonObject queue=queues.at(index).toObject();
          if(queue.contains(secondFlag)){
              return queue.value(secondFlag).toString();
          }
         }

         subObj=rootObj.value("virtualhost").toObject();
         exchanges=subObj.value("exchanges1").toArray();
         exchange=exchanges.at(0).toObject();
         if(exchange.contains(firstFlag)){
         QJsonArray queues=exchange.value(firstFlag).toArray();
         QJsonObject queue=queues.at(index).toObject();
          if(queue.contains(secondFlag)){
              return queue.value(secondFlag).toString();
          }
         }
        }

2.修改json文档中属性的值:(代码如下)

bool setJsonParas(QString path, QString firstFlag, QString secondFlag,int index,QString para)
{
    QFile file(path);
    if (!file.open(QIODevice::ReadOnly)){
        qDebug()<<"file.open  ReadOnly   fail";
        return "";
    }
    //从json文件读取信息
    bool res=false;
   QByteArray allData=file.readAll();
   file.close();
   QJsonParseError json_error;
   QJsonDocument jsonDoc;
   jsonDoc=QJsonDocument::fromJson(allData, &json_error);
   if(json_error.error != QJsonParseError::NoError)
      {
           qDebug() << "json error!";
           qDebug()<<json_error.errorString();
           return res;
       }
   QJsonObject rootObj = jsonDoc.object();
   QStringList keys = rootObj.keys();
   if(rootObj.contains(firstFlag)){
       QJsonObject subObj=rootObj.value(firstFlag).toObject();
       if(subObj.contains(secondFlag)){
          QJsonValue jsonvalue(para);
          subObj.insert(secondFlag,jsonvalue);
          res=true;
          QJsonValue subvalue(subObj);
          rootObj.insert(firstFlag,subvalue);
       }
   }
   else{
       for(int i=0;i<keys.size();i++){
           QString key=keys.at(i);
           QJsonObject subObj=rootObj.value(key).toObject();
           if(subObj.contains(firstFlag)){
               QJsonArray subObjarray=subObj.value(firstFlag).toArray();
               QJsonObject subOjs=subObjarray.at(0).toObject();
               if(subOjs.contains(secondFlag)){
                   QJsonValue jsonvalue(para);
                   subOjs.insert(secondFlag,jsonvalue);
                   res=true;
                   QJsonArray jsonArray;
                   QJsonValue subsValue(subOjs);
                   jsonArray.insert(0,subsValue);
                   QJsonValue subValue(jsonArray);
                   subObj.insert(firstFlag,subValue);
                   QJsonValue  rootValue(subObj);
                   rootObj.insert(key,rootValue);
               }
           }
       }
   }
   QJsonObject subObj=rootObj.value("virtualhost").toObject();
   QJsonArray subArray=subObj.value("exchanges").toArray();
   QJsonObject subsObj=subArray.at(0).toObject();
   if(subsObj.contains(firstFlag)){
       QJsonArray subObjArray=subsObj.value(firstFlag).toArray();
       QJsonObject subObj1=subObjArray.at(index).toObject();
       if(subObj1.contains(secondFlag)){
           QJsonValue jonsvalue(para);
           subObj1.insert(secondFlag,jonsvalue);
           res=true;
           QJsonValue subvalue1(subObj1);
           subObjArray.removeAt(index);
           subObjArray.insert(index,subvalue1);
           QJsonValue subsvalue(subObjArray);
           subsObj.insert(firstFlag,subsvalue);
           QJsonValue subsObjvalue(subsObj);
           subArray.removeAt(0);
           subArray.insert(0,subsObjvalue);
           QJsonValue subvalue(subArray);
           subObj.insert("exchanges",subvalue);
           QJsonValue rootvalue(subObj);
           rootObj.insert("virtualhost",rootvalue);
       }
   }
   if(res==false){
       return res;
   }

   QFile filejson(path);
   if( !filejson.open( QFile::WriteOnly | QFile::Truncate) ){
       qWarning("error::ParserXML->writeOperateXml->file.open\n");
       return false;
   }
   QJsonDocument json;
   json.setObject(rootObj);
   QByteArray byte_array = json.toJson();
   filejson.write(byte_array);
   filejson.close();
   return true;
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt,可以使用Qt提供的Json来组织和解析数据。Qt从版本5.0开始提供了对Json的支持。主要有四个与Json相关的常用:QJsonDocument、QJsonArray、QJsonObject和QJsonValue。 QJsonDocument封装了一个完整的JSON文档,可以从基于文本的UTF-8编码的表示以及Qt的二进制格式读取写入文档。 QJsonArray表示JSON数组,是一个值的列表。可以通过插入和删除QJsonValue来操作该列表。 QJsonObject表示JSON对象,是键值对的列表,其键是唯一的字符串,值由QJsonValue表示。 QJsonValue封装了JSON支持的数据型。 QJsonParseError用于报告JSON解析过程的错误。 对于Json使用,可以参考以上提到的文档和相关函数进行操作,根据具体的需求进行数据的组织和解析。Json格式的数据在Qt可以方便地进行处理,并且由于Json的数据格式与语言无关,因此在QtJson使用具有广泛的应用场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【QTQt Json 的操作](https://blog.csdn.net/qq_43331089/article/details/124582761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【Qt专栏】QtJson使用教程](https://blog.csdn.net/weixin_43729127/article/details/127522889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值