Qt QJsonDocument 解析 JSON 对象:访问子对象及数组元素示例
这段代码演示了如何使用 Qt 的 QJsonDocument 类解析 JSON 对象并访问其子对象和数组元素。
代码示例:
if( !jsonDoc.isNull() && (json_error.error == QJsonParseError::NoError) )
{
qDebug() << 'jsonDoc: \n' << jsonDoc;
QJsonObject rootObj = jsonDoc.object();
QStringList keys = rootObj.keys();
for(const auto& key : rootObj.keys())
{
QJsonValue value = rootObj.value(key);
if(value.isString())
{
qDebug() << key << ':' << value.toString();
}
else if(value.isObject())
{
qDebug() << key << ':';
QJsonObject subObj = value.toObject();
QStringList subKeys = subObj.keys();
for(auto subKey : subKeys)
{
QJsonValue subValue = subObj.value(subKey);
if(subValue.isString())
{
qDebug() << '\t' << subKey << ':' << subValue.toString();
}
}
}
// 注释部分:处理数组元素
// else if(value.isArray())
// {
// QJsonArray arr = value.toArray();
// for(int i = 0; i < arr.count(); i++)
// {
// qDebug() << key << ':' << arr.at(i).toString();
// }
// }
}
}
else
{
qDebug() << QString('JsonPareError: %1').arg(json_error.errorString());
return;
}
代码解释:
- 判断 JSON 解析是否成功: 代码首先检查 JSON 解析是否成功,如果
jsonDoc不为空且json_error为NoError,则说明解析成功,继续执行后续操作。 - 访问根对象: 代码通过
jsonDoc.object()获取根对象,并使用keys()方法获取所有键值。 - 遍历键值: 代码使用
for循环遍历所有键值,并使用value()方法获取每个键值对应的值。 - 处理不同数据类型: 代码根据值的类型进行不同的处理。如果值为字符串类型,则直接输出键值对;如果值为对象类型,则递归地遍历子对象;如果值为数组类型,则遍历数组中的元素。
- 处理数组: 代码中注释掉的部分是处理数组元素的部分。如果需要处理数组,可以取消注释该部分代码,并按照相应的逻辑处理数组中的元素。
总结:
这段代码演示了如何使用 Qt 的 QJsonDocument 类解析 JSON 对象,并访问其子对象和数组元素。通过代码示例,我们可以学习到如何遍历对象和数组,以及如何根据数据类型进行不同的处理。同时,代码中注释的部分也为我们提供了一个处理数组元素的思路。
原文地址: https://www.cveoy.top/t/topic/nXLQ 著作权归作者所有。请勿转载和采集!