A JSON Array eine geordnete Liste ist, wird geschrieben als:
[ <item1>, <item2>, <item3> ]
während ein JSON Objekt benannte Liste ist, geschrieben als:
{
<name1>: <item1>,
<name2>: <item2>
}
In Qt, ein QJsonArray
entspricht zu einer (QList<QVariant>
) und einer QJsonObject
entspricht(QMap<QString, QVariant>
).
Welche Datei Sie verwenden müssen, hängt von der zu analysierenden Datei ab. Zum Beispiel unter Wikipedia Beispiel:
{
"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
}
Sie würden ein QJsonArray
verwenden, um die Liste der phoneNumbers
, jedes Element von phoneNumbers
zu bekommen, ist ein QJsonObject
whith 2 genannten Werte: type
und number
.
Wenn in Ihrem Code Sie ein JSON-Element manipulieren müssen, aber Sie wissen nicht seine Art können Sie QJsonValue
verwenden, die eine der folgenden ist: QJsonObject
, QJsonArray
, bool
, double
oder ein QString
hmm, das ist es! Ich dachte 'QJsonObject' wird anstelle von' QJsonArray' erstellt, wenn 'json' Datenquelle nur" einen Datensatz "enthält. – KernelPanic
Und kann ich für "ungültiges" 'json' -Format sicher sein, wenn sowohl 'isObject() 'als auch' isArray()' 'true' zurückgeben? – KernelPanic
@Kernelpanic Sie können nicht beide wahr zurückkehren lassen. Ihr Wurzelelement kann nicht gleichzeitig ein Array und ein Objekt sein. Wenn Sie den Beweis wollen, in Qt Quellen 'QJsonDocument :: isArray()' ruft 'QJsonPrivate :: Base :: isArray()', die als Inline implementiert ist 'bool isArray() const {return! IsObject(); } '. Sie können auch mit 'QJsonDocument :: isNull()' und mit dem zweiten Parameter von 'QJsonDocument :: fromJson()' nach ungültigem JSON suchen. –