甲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
蒙山2个命名值:type
和number
。
如果在你的代码,你需要操纵JSON元素,但你不知道它的类型,你可以使用QJsonValue
,这是一个:QJsonObject
,QJsonArray
,bool
,double
或QString
嗯,就是它!如果'json'数据源只包含“一条记录”,我认为'QJsonObject'被创建而不是'QJsonArray'。 – KernelPanic
如果'isObject()'和'isArray()'返回'true',我可以肯定“无效”的'json'格式吗? – KernelPanic
@Kernelpanic你不能同时返回true。您的根元素不能同时是数组和对象。如果你想要证明,在Qt源''QJsonDocument :: isArray()'调用'QJsonPrivate :: Base :: isArray()',这是作为内嵌'布尔isArray()const {return!isObject();实现。 }'。你也可以用'QJsonDocument :: isNull()'和'QJsonDocument :: fromJson()'的第二个参数检查无效的JSON。 –