2016-08-05 24 views

Antwort

3

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

+0

hmm, das ist es! Ich dachte 'QJsonObject' wird anstelle von' QJsonArray' erstellt, wenn 'json' Datenquelle nur" einen Datensatz "enthält. – KernelPanic

+0

Und kann ich für "ungültiges" 'json' -Format sicher sein, wenn sowohl 'isObject() 'als auch' isArray()' 'true' zurückgeben? – KernelPanic

+1

@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. –