簡體   English   中英

Qt/C++ 獲取 Json 請求

[英]Qt/C++ get Json request

我是 Qt 框架的新手,我正在嘗試從 EMSC api 獲取地震列表。 我的代碼如下所示:

void MainWindow::getJsonData(QNetworkAccessManager *mNetworkManager) {
    const QUrl json("https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json");
    QNetworkRequest *mNetworkRequest = new QNetworkRequest;
    mNetworkRequest->setUrl(json);
    mNetworkRequest->setRawHeader("Content-Type", "application/json");
    mNetworkRequest->setRawHeader("Accept", "application/json");

    QNetworkReply *mNetworkReply = mNetworkManager->get(*mNetworkRequest);
    QString replyString = (QString) mNetworkReply->readAll();

    QJsonDocument document = QJsonDocument::fromJson(replyString.toUtf8());
    QJsonObject object = document.object();
    QJsonValue type = object["type"].toString();
    QJsonArray featuresArray = object["features"].toArray();

    qDebug() << type;
    qDebug() << featuresArray;
}

問題是我沒有從服務器得到任何響應。

Qt 是一個庫(不是框架),通過信號和槽異步處理所有事務,所以不要期望同步獲得響應。

#include <QCoreApplication>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>


class Client: public QObject{
public:
    void startRequest(){
        const QUrl json("https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json");
        QNetworkRequest request;
        request.setUrl(json);
        request.setRawHeader("Content-Type", "application/json");
        request.setRawHeader("Accept", "application/json");
        QNetworkReply *reply = mNetworkManager.get(request);
        connect(reply, &QNetworkReply::finished, this, &Client::processRequest);
    }
private:
    void processRequest(){
        QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
        if(!reply) return;

        QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
        QJsonObject object = document.object();
        QJsonValue type = object["type"].toString();
        QJsonArray featuresArray = object["features"].toArray();
        qDebug() << type << featuresArray;
        reply->deleteLater();
    }
    QNetworkAccessManager mNetworkManager;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Client client;
    client.startRequest();

    return a.exec();
}

Output:

QJsonValue(string, "FeatureCollection") QJsonArray([{"geometry":{"coordinates":[16.23,45.4,-2],"type":"Point"},"id":"20210202_0000178", ...

這是我的一些代碼:

QNetworkRequest req (QUrl(QString::fromStdString(url)));
req.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
if (authHeader.length() > 0) {
    req.setRawHeader(QByteArray("Authorization"), QByteArray::fromStdString(authHeader));
}
QByteArray bodyArray;

if (body.length() > 0) {
    bodyArray.append(QString::fromStdString(body).toUtf8());
}

QNetworkReply * reply = method(req, bodyArray);

QObject::connect(reply, &QNetworkReply::finished, [=]{
.... });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM