Разбор QT5 JSON из QByteArray

У меня есть 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, вторая отладка ничего не отображает.

Должен ли я разобрать это иначе, или почему этот метод не работает?

3

Решение

Вам либо нужно знать формат, либо определить его, задав объекту тип. Вот почему 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 и т. Д.

3

Другие решения

В частности, я не знаком с API-интерфейсами qt, но в целом объекты JSON не могут быть преобразованы в массивы, если они не являются массивами JSON (например, значение для «items»).

Возможно, вы хотите что-то вроде:

QJsonObject itemObject = audioDoc.object();
QJsonObject responseObject = itemObject["response"].toObject();
QJsonArray itemArray = responseObject["items"].toArray();
1

По вопросам рекламы [email protected]