2017-05-02 1 views
0

Ich arbeite gerade an einem Schulprojekt, bei dem ich die Open Movie Database API verwende. Ich habe das Gefühl, dass die Anfrage funktioniert, aber ich kann nicht scheinen, dass Informationen wie Titel, Jahr usw. in der Benutzeroberfläche oder sogar in der Konsole angezeigt werden. Ich habe versucht, Tutorials über JSON in Qt zu suchen, aber ich kann keine finden, die nützlich sind. Jede Hilfe wäre großartig!Qt: Wie man eine JSON-Anfrage von der OMDb API zieht

Was muss ich ziehen:

void MainWindow::sendRequest(){ 
    QEventLoop eventLoop; 
    QNetworkAccessManager manager; 

    QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); 
    QNetworkRequest req(QUrl(QString("http://www.omdbapi.com/?t=Scarface"))); 
    QNetworkReply *reply = manager.get(req); 
    eventLoop.exec(); 

} 

Antwort

0

die Daten zu dekodieren können Sie QJsonDocument, QJsonObject, QJsonArray verwenden:

#include <QEventLoop> 
#include <QNetworkAccessManager> 
#include <QNetworkReply> 
#include <QNetworkRequest> 
#include <QDebug> 
#include <QJsonDocument> 
#include <QJsonArray> 
#include <QJsonObject> 

void MainWindow::sendRequest() 
{ 
    QEventLoop eventLoop; 
    QNetworkAccessManager manager; 

    connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); 
    QNetworkRequest req(QUrl("http://www.omdbapi.com/?t=Scarface")); 
    QNetworkReply *reply = manager.get(req); 
    eventLoop.exec(); 
    QJsonDocument document = QJsonDocument::fromJson(reply->readAll()); 

    if(document.isObject()){ 
     QJsonObject valuesO = document.object(); 

     for(auto key: valuesO.keys()){ 
      qDebug()<<key<<" : "<<valuesO[key].toString(); 
     } 
     // access by particular key 
     //qDebug() << valuesO["Actors"].toString(); 
    } 

} 

Ausgang:

"Actors" : "Al Pacino, Steven Bauer, Michelle Pfeiffer, Mary Elizabeth Mastrantonio" 
"Awards" : "Nominated for 3 Golden Globes. Another 4 nominations." 
"BoxOffice" : "$656,161.00" 
"Country" : "USA" 
"DVD" : "30 Sep 2003" 
"Director" : "Brian De Palma" 
"Genre" : "Crime, Drama" 
"Language" : "English, Spanish" 
"Metascore" : "65" 
"Plot" : "In Miami in 1980, a determined Cuban immigrant takes over a drug cartel and succumbs to greed." 
"Poster" : "https://images-na.ssl-images-amazon.com/images/M/MV5BNjdjNGQ4NDEt[email protected]._V1_SX300.jpg" 
"Production" : "Universal Films" 
"Rated" : "R" 
"Ratings" : "" 
"Released" : "09 Dec 1983" 
"Response" : "True" 
"Runtime" : "170 min" 
"Title" : "Scarface" 
"Type" : "movie" 
"Website" : "N/A" 
"Writer" : "Oliver Stone (screenplay)" 
"Year" : "1983" 
"imdbID" : "tt0086250" 
"imdbRating" : "8.3" 
"imdbVotes" : "572,774" 
+0

danke Ihnen so sehr, Das war genau das, was ich wollte. Wenn ich "Actors", "Title" usw. zu einem Label in meiner GUI zuordnen möchte, wie würde ich das tun? – Gum

+0

Es wäre etwas ähnlich zu: '{Ihr Label} .setText (valuesO [" Actors "]. ToString())' – eyllanesc

+0

Wenn meine Antwort Ihnen hilft, markieren Sie es bitte als korrekt. – eyllanesc

Verwandte Themen