QJsonDocument::array() 和 QJsonDocument::object()
Posted
技术标签:
【中文标题】QJsonDocument::array() 和 QJsonDocument::object()【英文标题】:QJsonDocument::array() and QJsonDocument::object() 【发布时间】:2016-08-05 07:30:42 【问题描述】:我正在阅读QJsonDocument documentation 并使用QJsonDocument
与以下行:
emit this->ueSignalNewDataArrivedPlaces(QJsonDocument::fromBinaryData(incomingData[0].toByteArray()));
我不明白,在这行之后,我应该使用 QJsonDocument::array()还是QJsonDocument::object(),即QJsonDocument
在什么情况下创建array
以及在什么情况下创建object
?
【问题讨论】:
【参考方案1】:一个JSON数组是一个有序列表,写成:
[ <item1>, <item2>, <item3> ]
而 JSON 对象是一个命名列表,写成:
<name1>: <item1>,
<name2>: <item2>
在 Qt 中,QJsonArray
等效于 QVariantList
(QList<QVariant>
),QJsonObject
等效于 QVariantMap
(QMap<QString, QVariant>
)。
你必须使用哪一个取决于你正在解析的文件。 以***为例:
"firstName": "John",
"lastName": "Smith",
"isAlive": true,
"age": 25,
"address":
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
,
"phoneNumbers": [
"type": "home",
"number": "212 555-1234"
,
"type": "office",
"number": "646 555-4567"
,
"type": "mobile",
"number": "123 456-7890"
],
"children": [],
"spouse": null
您可以使用QJsonArray
来获取phoneNumbers
的列表,phoneNumbers
的每个元素都是一个QJsonObject
,带有两个命名值:type
和number
。
如果在您的代码中您需要操作 JSON 元素但您不知道它的类型,您可以使用 QJsonValue
,它是以下之一:QJsonObject
、QJsonArray
、bool
、double
或QString
【讨论】:
嗯,就是这样!如果json
数据源仅包含“一条记录”,我认为创建QJsonObject
而不是QJsonArray
。
如果isObject()
和isArray()
都返回true
,我可以确定“无效”json
格式吗?
@Kernelpanic 您不能同时返回 true。您的根元素不能既是数组又是对象。如果你想要证明,在 Qt 源代码中 QJsonDocument::isArray()
调用 QJsonPrivate::Base::isArray()
,它被实现为内联 bool isArray() const return !isObject();
。您还可以使用QJsonDocument::isNull()
和QJsonDocument::fromJson()
的第二个参数检查无效的JSON。以上是关于QJsonDocument::array() 和 QJsonDocument::object()的主要内容,如果未能解决你的问题,请参考以下文章
第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等
shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()