使用 QT 发送 POST 请求并读取 Json 响应

Aso*_*ife 3 c++ qt json

我是 QT 开发的新手。我正在尝试对休息服务执行简单的 Post Request 以读取 Json 数据。

目前我写过:

void LoginWindow::on_pushButton_clicked(){
    // Setup the webservice url
    QUrl serviceUrl = QUrl("http://urlrestservice.com");

    QByteArray postData;
    postData.append("request=userdata&");
    postData.append("user=myusername&");
    postData.append("password=mypasswod");

    // Call the webservice
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    //QNetworkRequest::setHeader();
    QNetworkRequest request(serviceUrl);
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant( 
    QString("text/xml")));

   connect(manager, SIGNAL(finished(QNetworkReply*)), this, 
    SLOT(serviceRequestFinished(QNetworkReply*)));
    manager->post(request, postData);
}
Run Code Online (Sandbox Code Playgroud)

之后我不知道如何进行。我做了一个空的方法

void LoginWindow::serviceRequestFinished(QNetworkReply* reply){ }
Run Code Online (Sandbox Code Playgroud)

但我不知道在他们里面怎么做。

Post 请求应该返回给我:

{
    "response": {
    "status": "200",
    "message": "Correct request"
},
"data": [
    [
        {
            "href": "link",
            "text": "string matr"
        },
        {
            "href": "link",
            "text": "string type"
        },
        {
            "href": "link",
            "text": "string name"
        },
        {
            "href": "link",
            "text": "string state"
        }
    ]

]
}
Run Code Online (Sandbox Code Playgroud)

我读过存在一个库 QJson,但我认为官方文档有点混乱,我不知道如何继续。

Mar*_*rco 7

到目前为止似乎还可以,接下来您应该向您的 serviceReqiestFinished 添加一些代码。

#include <QNetworkReply>
#include <QJsonValue>
#include <QJsonValueRef>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>


void LoginWindow::serviceRequestFinished(QNetworkReply* reply){
    QByteArray buffer = reply->readAll();
    qDebug() << buffer;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(buffer));
    QJsonObject jsonReply = jsonDoc.object();

    QJsonObject response = jsonReply["response"].toObject();
    QJsonArray  data     = jsonReply["data"].toArray();
    qDebug() << data;
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效