Un tableau JSON est une liste ordonnée, il est écrit que:
[ <item1>, <item2>, <item3> ]
alors qu'un objet JSON est une liste nommée, écrit:
{
<name1>: <item1>,
<name2>: <item2>
}
Dans Qt, un QJsonArray
est équivalent à QVariantList
(QList<QVariant>
) et QJsonObject
est équivalent à QVariantMap
(QMap<QString, QVariant>
).
Lequel vous devez utiliser dépend du fichier que vous analysez. Par exemple, en prenant par exemple Wikipedia:
{
"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
}
Vous utilisez un QJsonArray
pour obtenir la liste des phoneNumbers
, chaque élément de phoneNumbers
est un QJsonObject
cinque 2 valeurs nommées: type
et number
.
Si votre code vous devez manipuler un élément de JSON, mais vous ne connaissez pas son type que vous pouvez utiliser QJsonValue
, qui est l'un des: QJsonObject
, QJsonArray
, bool
, double
ou QString
hmm, voilà! Je pensais que 'QJsonObject' est créé à la place de' QJsonArray' si la source de données 'json' contient seulement" un enregistrement ". – KernelPanic
Et puis-je être sûr du format "json" "invalide" si à la fois 'isObject()' et 'isArray()' retourne 'true'? – KernelPanic
@Kernelpanic Vous ne pouvez pas avoir les deux retournant vrai. Votre élément racine ne peut pas être à la fois un tableau et un objet. Si vous voulez la preuve, dans les sources Qt 'QJsonDocument :: isArray()' appelle 'QJsonPrivate :: Base :: isArray()', qui est implémenté comme inline 'bool isArray() const {return! IsObject(); } '. Vous pouvez également rechercher un JSON invalide avec 'QJsonDocument :: isNull()' et avec le second paramètre de 'QJsonDocument :: fromJson()'. –