2016-08-05 56 views

回答

3

甲JSON阵列的有序列表,它被写成:

[ <item1>, <item2>, <item3> ] 

而JSON对象是命名列表,写为:

{ 
    <name1>: <item1>, 
    <name2>: <item2> 
} 

在Qt中,一个QJsonArray相当于到QVariantListQList<QVariant>)和QJsonObject相当于QVariantMapQMap<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个命名值:typenumber

如果在你的代码,你需要操纵JSON元素,但你不知道它的类型,你可以使用QJsonValue,这是一个:QJsonObjectQJsonArraybooldoubleQString

+0

嗯,就是它!如果'json'数据源只包含“一条记录”,我认为'QJsonObject'被创建而不是'QJsonArray'。 – KernelPanic

+0

如果'isObject()'和'isArray()'返回'true',我可以肯定“无效”的'json'格式吗? – KernelPanic

+1

@Kernelpanic你不能同时返回true。您的根元素不能同时是数组和对象。如果你想要证明,在Qt源''QJsonDocument :: isArray()'调用'QJsonPrivate :: Base :: isArray()',这是作为内嵌'布尔isArray()const {return!isObject();实现。 }'。你也可以用'QJsonDocument :: isNull()'和'QJsonDocument :: fromJson()'的第二个参数检查无效的JSON。 –