arrays - Qt JSON:如何获取数组元素?
问题描述
我觉得我在这里失去了理智。
我正在尝试解析 JSON 文档,每次尝试访问数组的元素时,我都会得到数组本身。经过一番淘汰后,我想出了以下SSCCE:
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QByteArray jsonData {"[1,2]"};
QJsonParseError error;
const QJsonDocument jsonDoc {QJsonDocument::fromJson(jsonData, &error)};
if(error.error != QJsonParseError::NoError)
{
qWarning() << error.errorString();
return -1;
}
Q_ASSERT(!jsonDoc.isNull());
Q_ASSERT(!jsonDoc.isEmpty());
Q_ASSERT(jsonDoc.isArray());
const QJsonArray jsonArray {jsonDoc.array()};
qDebug() << jsonArray.size(); // Expectation: 2, reality: 1
qDebug() << jsonArray; // Expectation: QJsonArray([1,2]), reality: QJsonArray([[1,2]])
const QJsonValue jsonValue {jsonArray.at(0)};
qDebug() << jsonValue.type(); // returns 4 (Array)
const QJsonArray jsonArray2 {jsonValue.toArray()};
qDebug() << jsonArray2.size(); // Expectation: 2, reality: 1
qDebug() << jsonArray2; // Expectation: QJsonArray([1,2]), reality: QJsonArray([[1,2]])
// ...ad infinitum
return 0;
}
问题是,我在 Qt 5.9.4 和 5.15.1 上得到了这种行为,但在古代 Qt 5.1.1 上却没有!
在 Qt 5.1.1 上,结果正是我所期望的:jsonArray.size()
返回 2、jsonArray
isQJsonArray([1,2])
和jsonValue.type()
is 2 ( Double
)。
显然问题出在我身上,因为像这样的错误不会溜走并存活(至少)三年。所以问题是,我如何使用现代 Qt 版本从上述示例中的数组中提取实际值(即1
和)。2
解决方案
const QJsonArray jsonArray {jsonDoc.array()};
这不符合您的预期。花括号初始化在用于所有不需要它的地方(除了不可读性)时,真的是一个皮塔饼。
推荐阅读
- c++ - 如何在没有小数位限制的c ++中进行浮点数
- angular - 角度保存/恢复组件状态
- android-volley - 使用 Volley 与 BigCommerce 的 Orders API 端点交互时,如何解决“未知主机异常”?
- sql - 多行到列值按列在 SQL Server 中分组
- python-3.x - Python中的PyVisa.errors.VisaIOError异常处理
- prebid.js - 我可以在 prebid 中更改价格粒度吗
- python - 如何从对象访问值
- powershell - Powershell 列出所有名为“Create”的方法
- r - 与转移论点的递归关系
- javascript - 使用 {{data}} 编辑数据 Firestore