Qt und json



  • Guten Morgen,

    ich beschäftige mich derzeit mit json und bin auf etwas gestoßen was ich nicht lösen kann. Hier der Code vielleicht könnt ihr mir dabei helfen.

    QEventLoop eventLoop;
    
        QNetworkAccessManager mgr;
        QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    
        QNetworkRequest req( QUrl( QString("https://euw.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/Urb?api_key=fc656ab0-abd0-40b6-810b-c71f4243570f") ) );
        QNetworkReply *reply = mgr.get(req);
        eventLoop.exec(); 
    
        if (reply->error() == QNetworkReply::NoError) {
    
            QString strReply = (QString)reply->readAll();
    
            qDebug() << "Response:" << strReply;
            QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
    
            QJsonObject jsonObj = jsonResponse.object();
    
            qDebug() << "id:" << jsonObj["id"].toString();
    
            delete reply;
        }
        else {
            qDebug() << "Failure" <<reply->errorString();
            delete reply;
        }
    

    Url response:

    {"urb":{"id":20197099,"name":"Urb","profileIconId":589,"summonerLevel":30,"revisionDate":1464122887000}}
    

    Ich bekomme die gewünschte "id" nicht angezeigt. Wenn ich das ganze aber mit dieser json Datei (sehr simple)

    {
    "one":"eins"
    }
    

    versuche und ich möchte "one" haben, bekomme ich die "eins"! Was mache ich falsch, jemand eine Idee?



  • Das Hauptattribut ist doch "urb".
    Probiere daher mal

    jsonObj["urb"]["id"]
    


  • Th69 schrieb:

    Das Hauptattribut ist doch "urb".
    Probiere daher mal

    jsonObj["urb"]["id"]
    

    Das hat leider nicht funktioniert, aber du hast mich auf eine Idee gebracht und zwar

    QJsonObject jsonObjtwo = jsonObj["urb"].toObject();
    
            qDebug() << "id:" << jsonObjtwo["id"].toInt();
    

    Ich habe das Hauptattribut an ein weiteres Objekt übergeben und dann konnte ich mit "jsonObjetwo" auf die "id" zugreifen, jedoch anstatt to.String habe ich to.Int verwendet und es funktioniert.

    Danke für Hinweis.



  • 👍


Anmelden zum Antworten