QT解析Json数据完整流程
准备Json数据
- 存放路径:D:\路径\person.json
- 数据
{
"799570b6-5770-4b4a-b63c-be0b147563d3": [
{
"name": "张三",
"age":"35",
"idNumber": "123456...",
"children": [
{
"name": "张小三",
"age":"9",
"idNumber": "123789...",
"profession": "哈哈哈"
}
],
"address": "北京市海淀区",
"profession": "吼吼吼"
}
]
}
- 分析
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();
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())
{
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();
}
}
}
}