У меня есть QByteArray, содержит этот JSON
{"response":
{"count":2,
"items":[
{"name":"somename","key":1"},
{"name":"somename","key":1"}
]}}
Необходимо разобрать и получить необходимые данные:
QJsonDocument itemDoc = QJsonDocument::fromJson(answer);
QJsonObject itemObject = itemDoc.object();
qDebug()<<itemObject;
QJsonArray itemArray = itemObject["response"].toArray();
qDebug()<<itemArray;
Первая отладка отображает содержимое всего QByteArray, записанного в itemObject, вторая отладка ничего не отображает.
Должен ли я разобрать это иначе, или почему этот метод не работает?
Вам либо нужно знать формат, либо определить его, задав объекту тип. Вот почему QJsonValue имеет такие функции, как isArray, toArray, isBool, toBool и т. д.
Если вы знаете формат, вы можете сделать что-то вроде этого:
// get the root object
QJsonDocument itemDoc = QJsonDocument::fromJson(answer);
QJsonObject rootObject = itemDoc.object();
// get the response object
QJsonValue response = rootObject.value("response");
QJsonObject responseObj = response.toObject();
// print out the list of keys ("count")
QStringList keys = responseObj.keys();
foreach(QString key, keys)
{
qDebug() << key;
}
// print the value of the key "count")
qDebug() << responseObj.value("count");
// get the array of items
QJsonValue itemArrayValue = responseObj.value("items");
// check we have an array
if(itemArrayValue.isArray())
{
// get the array as a JsonArray
QJsonArray itemArray = itemArrayValue.toArray();
}
Если вы не знаете формат, вам нужно будет задать каждому QJsonObject его тип и отреагировать соответствующим образом. Хорошей идеей является проверка типа QJsonValue перед преобразованием его в его законный объект, такой как array, int и т. Д.
В частности, я не знаком с API-интерфейсами qt, но в целом объекты JSON не могут быть преобразованы в массивы, если они не являются массивами JSON (например, значение для «items»).
Возможно, вы хотите что-то вроде:
QJsonObject itemObject = audioDoc.object();
QJsonObject responseObject = itemObject["response"].toObject();
QJsonArray itemArray = responseObject["items"].toArray();