2017-10-20 26 views
0

J'ai cet objet JSON et je veux accéder à la « durée » et le montrer sur la console en utilisant Qt:Comment accéder à l'élément de JSON en utilisant 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" 
    } 
    } 
] 
} 

Et mon code Qt est la suivante:

{ 
    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; 
} 

Cependant ma sortie est:

v1 = QJsonValue (tableau, QJsonArray ([{ "contentDetails": { "légende": "false", "définition": "HD", "dimension": "2d "," duration ":" PT58M21S "," licensedContent ": true," projection ":" rectangulaire "}," etag ":" \ "Cbz3lIQ2N25AfwNr-BdxUVxJ_QY/PkTW6UN9MH0O2kDApjC3penIiKs \" », "id": "WkC18w6Ys7Y", "type": "youtube # vidéo"}]))

v2 = QJsonValue (non définie)

v3 = "" Donc, v1 est bien, mais v2 devient indéfini. Que fais-je mal et comment puis-je accéder à l'élément "durée" correctement?

Répondre

0

La réponse directe comme suit:

// 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(); 

Le résultat: PT58M21S

0

items est une liste, donc l'appel toObject() il renvoie juste la valeur par défaut. Selon la documentation:

Convertit la valeur en objet et la renvoie.

Si type() n'est pas Object, la valeur par défaut sera retournée.

Vous devez appeler le toArray(), qui le convertira en QJsonArray. De là, vous pouvez prendre le premier élément du tableau en utilisant une variété de méthodes, ou itérer sur le tableau si cela a plus de sens pour votre schéma.