Как получить доступ к элементу JSON, используя Qt

У меня есть этот объект Json, и я хочу получить доступ к «duration» и показать его на консоли, используя Qt:

{
"kind": "youtube#videoListResponse",
"etag": "\"cbz3lIQ2N25AfwNr-BdxUVxJ_QY/brZ0pmrmXldPPKpGPRM-8I4dDFQ\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#video",
"etag": "\"cbz3lIQ2N25AfwNr-BdxUVxJ_QY/PkTW6UN9MH0O2kDApjC3penIiKs\"",
"id": "WkC18w6Ys7Y",
"contentDetails": {
"duration": "PT58M21S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": true,
"projection": "rectangular"}
}
]
}

И мой код Qt такой:

{
QJsonDocument jsonResponse = QJsonDocument::fromJson(message);
results = jsonResponse.object();

QJsonValue v1 = results.value("items");

qDebug() << "v1 = " << v1;

QJsonValue v2 = v1.toObject().value("contentDetails");

qDebug() <<"v2 = " << v2;

QString v3 = v2.toObject().value("duration").toString();

qDebug() << "v3 = " << v3;
}

Однако мой вывод:

v1 = QJsonValue (массив, QJsonArray ([{«contentDetails»: {«caption»: «false», «definition»: «hd», «dimension»: «2d», «duration»: «PT58M21S», «licensedContent» : правда, «проекция»: «прямоугольная»}, «ETag»: «\» cbz3lIQ2N25AfwNr-BdxUVxJ_QY / PkTW6UN9MH0O2kDApjC3penIiKs \ «», «идентификатор»: «WkC18w6Ys7Y», «вид»: «YouTube видео #»}]))

v2 = QJsonValue (не определено)

v3 = «»

Итак, v1 в порядке, но v2 становится неопределенным. Что я делаю не так и как я могу правильно получить доступ к элементу «duration»?

0

Решение

Прямой ответ следующим образом:

// Read the file which has the JSON object.
QFile file("jsonString.json");
if(!file.open(QFile::ReadOnly)){
qDebug()<< "Error, Cannot open the file.";
return false;
}

QJsonDocument jsonDoc = QJsonDocument::fromJson(file.readAll());
qDebug()<< jsonDoc.object().value("items").toArray()[0].toObject().value("contentDetails").toObject().value("duration").toString();

Результат:
PT58M21S

0

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

items это список, так зовет для объекта() на это просто возвращает значение по умолчанию. Согласно документации:

Преобразует значение в объект и возвращает его.

Если type () не является Object, будет возвращено значение defaultValue.

Вам нужно позвонить ToArray () на нем, который преобразует его в QJsonArray. Оттуда вы можете взять первый элемент из массива, используя различные методы, или выполнить итерацию по массиву, если это имеет больше смысла для вашей схемы.

0

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