C++ Qt/C++;获取Json请求

C++ Qt/C++;获取Json请求,c++,json,qt,C++,Json,Qt,我是Qt框架的新手,我正在尝试从EMSCAPI获取地震列表。我的代码如下所示: void MainWindow::getJsonData(QNetworkAccessManager *mNetworkManager) { const QUrl json("https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json"); QNetworkRequest *mNetwork

我是Qt框架的新手,我正在尝试从EMSCAPI获取地震列表。我的代码如下所示:

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;
}
void主窗口::getJsonData(QNetworkAccessManager*mNetworkManager){
const QUrl json(“https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json");
QNetworkRequest*mNetworkRequest=新的QNetworkRequest;
mNetworkRequest->setUrl(json);
mNetworkRequest->setRawHeader(“内容类型”、“应用程序/json”);
mNetworkRequest->setRawHeader(“接受”、“应用程序/json”);
QNetworkReply*mNetworkReply=mNetworkManager->get(*mNetworkRequest);
QString replyString=(QString)mNetworkReply->readAll();
QJsonDocument document=QJsonDocument::fromJson(replyString.toUtf8());
QJsonObject对象=document.object();
QJsonValue type=object[“type”].toString();
QJsonArray featuresArray=object[“features”].toArray();

qDebug()以下是我的一些代码:

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, [=]{
.... });
Qt是一个库(不是框架),它通过信号和插槽异步处理所有事务,因此不要期望同步获得响应

#包括
#包括
#包括
#包括
#包括
#包括
类客户端:公共QObject{
公众:
void startRequest(){
const QUrl json(“https://www.seismicportal.eu/fdsnws/event/1/query?limit=100&format=json");
QNetworkRequest请求;
setUrl(json);
setRawHeader(“内容类型”、“应用程序/json”);
setRawHeader(“接受”、“应用程序/json”);
QNetworkReply*reply=mNetworkManager.get(请求);
连接(reply,&QNetworkReply::finished,this,&Client::processRequest);
}
私人:
void processRequest(){
QNetworkReply*reply=qobject_cast(发送方());
如果(!回复)返回;
QJsonDocument document=QJsonDocument::fromJson(reply->readAll());
QJsonObject对象=document.object();
QJsonValue type=object[“type”].toString();
QJsonArray featuresArray=object[“features”].toArray();

qDebug()我不是肯定的,但我认为您使用的调用是异步调用,您需要实际使用connect()进行设置请求完成后调用以获得回拨。仅在没有任何解释的情况下删除代码并不是一个好的答案。还有,
方法是什么?@JarMan我不想剪切并粘贴1000行代码。重要的是,您必须设置connect语句。这与我之前写的有关async.Tha的评论一致谢谢你的回答,我明白我漏掉了什么。@JosephLarson你误解了我的评论。我并没有说你需要更多的代码,而是需要更多的解释。因此,答案不仅针对原始海报,也针对可能有类似问题的任何其他人。如果有人看到这篇帖子并看到你的答案,他们不喜欢我很想理解它。在某个地方引用注释也不好,因为注释可以从你的答案中单独删除。谢谢你的解释。我只是一个做一些编程的物理学家,我对Json很陌生。我所有的经验都是用fortran和C代码进行数值计算。我尝试过,但得到的是空值。不管怎样,我是我会对此做一些研究,所以再次感谢。无法将答案标记为已接受的答案,因为我在这方面没有足够的声誉。@EraldGuri 1)请不要伤害自己,因为没有人在这里评判你,你所表示的只是噪音,2)没有必要将答案标记为正确答案,所以请阅读并检查t他
QJsonValue(string, "FeatureCollection") QJsonArray([{"geometry":{"coordinates":[16.23,45.4,-2],"type":"Point"},"id":"20210202_0000178", ...