Kun Qt-sovelluksesta halutaan lähettää HTTP-requesteja palvelimelle, joka vastaa JSON-muodossa, lisätään sovellukseen seuraavat:
QT +=network
#include <QtNetwork> #include <QNetworkAccessManager> #include <QJsonDocument>
QByteArray response_data=reply->readAll();
QString site_url="http://localhost:3000/book"; QNetworkRequest request((site_url)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished (QNetworkReply*)),this, SLOT(getBookSlot(QNetworkReply*))); reply = manager->get(request);
QString site_url="http://localhost:3000/book"; QNetworkRequest request((site_url)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); //WEBTOKEN ALKU //Onnistuneen loginin seurauksena saadaan arvo muuttujalle webToken, jonka //tietotyyppi on QByteArray ja sen eteen asetetaan merkkijono Bearer QByteArray myToken="Bearer "+webToken; request.setRawHeader(QByteArray("Authorization"),(myToken)); //WEBTOKEN LOPPU manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished (QNetworkReply*)),this, SLOT(getBookSlot(QNetworkReply*))); reply = manager->get(request);Huom! Varsinaisen tokenin (eli webToken) eteen on siis kirjoitettava sana Bearer.
Edellä siis tehtiin http-request ja signaali kytkettiin slottiin getBookSlot. Nyt siis response käsitellään tuossa slotissa.
void MainWindow::getBookSlot (QNetworkReply *reply) { QByteArray response_data=reply->readAll(); QJsonDocument json_doc = QJsonDocument::fromJson(response_data); QJsonArray json_array = json_doc.array(); QString book; foreach (const QJsonValue &value, json_array) { QJsonObject json_obj = value.toObject(); book+=QString::number(json_obj["id_book"].toInt())+","+json_obj["name"].toString()+","+jsonobj["author"].toString()+"\r"; } qDebug()<<book; ui->textEditResults->setText(book); reply->deleteLater(); manager->deleteLater(); }
Jos haluat päästä käsiksi JSON-arrayn yksittäisen objektin kenttään, voit käyttää seuraavaa rakennetta
QByteArray response_data=reply->readAll(); QJsonDocument json_doc = QJsonDocument::fromJson(response_data); QJsonArray json_array = json_doc.array(); QString author=json_array.at(0)["author"].toString();Edellä QStringiin nimeltään author sijoitetaan ensimmäisen objektin (at(0)) author kentän arvo.
void MainWindow::getBookSlot (QNetworkReply *reply) { QByteArray response_data=reply->readAll(); QJsonDocument json_doc = QJsonDocument::fromJson(response_data); QJsonObject json_obj = json_doc.object(); QString book; book=QString::number(json_obj["id_book"].toInt())+","+json_obj["name"].toString()+","+json_obj["author"].toString(); qDebug()<<book; ui->textEditResults->setText(book); reply->deleteLater(); manager->deleteLater(); }
Http-request siis tehdään jostain funktiosta (vaikka buttonin klikkaus). Tuossa funktiossa signaali (finished) kytketään slottiin, jossa http-response(reply) käsitellään.