QT解析Json数据

QT解析Json数据完整流程

准备Json数据

  1. 存放路径:D:\路径\person.json
  2. 数据
//person.json
{//QJsonObject
   	"799570b6-5770-4b4a-b63c-be0b147563d3": [//QJsonArray
   		{
   			"name": "张三",
   			"age":"35",
   			"idNumber": "123456...",
   			"children": [
   				{
   					"name": "张小三",
   					"age":"9",
   					"idNumber": "123789...",
   					"profession": "哈哈哈"
   				}
   			],
   			"address": "北京市海淀区",
   			"profession": "吼吼吼"
   		}
   	]
}
  1. 分析
    json数据当中“{ }“属于一个QJsonObject,”[ ]“属于一个QJsonArray,知道这些信息,代码就很容易写了,无论多么复杂的Json文件,我们都可以迎刃而解。

编码

#include "QJsonDocument"
#include "QJsonObject"
#include "QJsonArray"
#include "QByteArray"
#include "QString"
#include "QFile"
#include "QIODevice"

QByteArray readJSonFile(QString strJsonFileName)
{
   QString strJson;
   QFile oJsonFile(strJsonFileName);
   if (!oJsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
       return "";
   }
   QByteArray allData = oJsonFile.readAll(); //从json文件读取信息
   oJsonFile.close();
   return allData;
}

QString readJsonData()
{
   QString strJsonFileName = QStringLiteral("D:\\路径\\person.json");
   QByteArray allData = readJSonFile(strJsonFileName);
   auto strReturn = QString::fromLocal8Bit(allData);
   return strReturn;
}

void  startAnalysisJsonData()
{
   QString jsonStr = readJsonData();
   QJsonParseError parseJsonErr;
   QJsonDocument oDocument = QJsonDocument::fromJson(jsonStr.toUtf8(), &parseJsonErr);
   if (!(parseJsonErr.error == QJsonParseError::NoError))
   {//文件解析错误    
       return;
   }

   if (!oDocument.isObject())
   {
       return;
   }

   auto allJson = oDocument.object();
   QJsonArray oJsonArray;
   for (auto key : allJson.keys()) //此处key为:"799570b6-5770-4b4a-b63c-be0b147563d3"
   {
       auto jsonOne = allJson.value(key);
       oJsonArray = jsonOne.toArray();
       for (int i = 0; i < oJsonArray.count(); ++i)
       {
           //张三全部信息
           QJsonObject oObj = oJsonArray.at(i).toObject();
           QString strName = oObj.value("name").toString();
           QString strAge = oObj.value("age").toString();
           QString strIDNumber = oObj.value("idNumber").toString();
           QString strAddress = oObj.value("address").toString();
           QString strProfession = oObj.value("profession").toString();

           //张小三全部信息
           QJsonArray oChildrenJsonArray = oObj.value("children").toArray();
           for (int j = 0; j < oChildrenJsonArray.count(); ++j)
           {
               QJsonObject oChildrenObj = oChildrenJsonArray.at(j).toObject();

               QString strChildrenName = oChildrenObj.value("name").toString();
               /*............*/
           }
       }
   }
}
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值