这篇文章主要为大家详细介绍了Qt如何利用QJson实现解析数组功能,文中的示例代码讲解详细,对我们学习Qt有一定帮助,需要的小伙伴可以了解一下
前言
现在有这样一个json结构,需要使用QJson来解析,结构如下:
"code": "0001",
"descrip": "文本描述1详细描述",
"id": "1",
"title": "文本1标题",
"type": 0,
"paths": ["E:/3.json", "F:/11.txt"]
}, {
"code": "0002",
"descrip": "文本描述2详细描述",
"id": "2",
"title": "文本2标题",
"type": 0,
"paths": ["E:/AndroidSetting.png", "E:/build.png", "F:/C++工程.png", "F:/build完成.png"]
}, {
"code": "00040003",
"descrip": "文本",
"id": "3",
"title": "文本3标题",
"type": 0,
"paths": ["F:/native-lib文件分析.png", "F:/编辑工程.png"]
}]
直接是一组json数组,连个关键字也没有,这样的数据该如何解析呢?
假设这些数据是存储在std::string串中,那么对以上字符串进行解析~
第一步:进行数据转换
将字符串解析成QJson识别的格式,第一步少不了QJsonDocument::fromJson
函数的转换,在QJsonDocument类中,该函数的定义如下:
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr);
参数是QByteArray类型。
第一步要做的工作就是如何将std::string转成QByteArray类型?
QString qsJson = QString::fromLocal8Bit(sJson.c_str());
QByteArray qsArray = qsJson.toUtf8().data();
在这里,需要注意的是,QString转成QByteArray时,一定是使用toUtf8
而不是toLocal8Bit
,否则在将字符串解析成QJsonDocument时,无法解析成功!
第二步:将字符串转成QJsonDocument格式
QJsonParseError stError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(qsJson.toUtf8().data(), &stError);
if (stError.error != QJsonParseError::NoError)
{
QString qsError = stError.errorString();
}
if (jsonDoc.isNull())
{
return false; //json结构解析失败
}
代码讲解:
为了防止在解析中出现错误而不知道是哪种原因时,就用到了QJsonParseError
类,一旦发现字符串解析失败,就可以获取错误原因,方便我们在程序开发时进行查找。
第三步:解析json数据
首先,将QJsonDocument转成QJsonArray结构
QJsonArray jsArrays = jsonDoc.array();
其次,遍历数据。与普通的STL的遍历方式一致,采用for循环方式,拿去下标下对应的数据
for(int i = 0; i < jsArrays.count(); i++)
{
QJsonValue valueArrayObject = jsArrays.at(i);
if (valueArrayObject.type() != QJsonValue::Object)
{
continue;
}
QJsonObject jsArrayValue = valueArrayObject.toObject();
QJsonValue jsCode = jsArrayValue.value("code");
QString qsCode = jsCode.toString();
}
代码解析:
上述代码流程:
1:读取数组下标数据
2:判断当前第i个数据的类型是不是json类型,此时,不是,不需要后续操作
3:类型转换
4:实际的json数据解析
上述只是用"code"做示例,其它的参数也如同code参数的解析方式一致,就不再过多说明了。但是需要注意,在读取下标、判断类型、类型转换这三步骤操作一定是要做的。
对于"paths"中仅有字符串的结构,该如何解析呢?
此时,就省略了第二步、第三步操作,直接将下标对应的json结构解析就可以了
QJsonValue valuePathObject = jsUrlArray.at(m); //获取数组下标数据 QString qsPath = valuePathObject.toString();
到此这篇关于Qt利用QJson实现解析数组的示例详解的文章就介绍到这了,更多相关Qt QJson解析数组内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Qt利用QJson实现解析数组的示例详解
基础教程推荐
- 一文带你了解C++中的字符替换方法 2023-07-20
- C/C++编程中const的使用详解 2023-03-26
- 详解c# Emit技术 2023-03-25
- C语言 structural body结构体详解用法 2022-12-06
- C++中的atoi 函数简介 2023-01-05
- 如何C++使用模板特化功能 2023-03-05
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C利用语言实现数据结构之队列 2022-11-22
- C++详细实现完整图书管理功能 2023-04-04
- C语言基础全局变量与局部变量教程详解 2022-12-31