2017-09-21 37 views
2

QT開発で新しくなった。私はJson Dataを読むために休憩サービスへの簡単なPost Requestをやろうとしています。QTでPOSTリクエストを送信し、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); 
} 

をどのようにprocede私にはわかりません。私は空の方法を作った

void LoginWindow::serviceRequestFinished(QNetworkReply* reply){ } 

しかし、私はそれらの中でどのように行うのか分からない。

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" 
     } 
    ] 

] 
} 

私は、ライブラリQJsonを存在していることを読んだが、私は、公式ドキュメントは少し混乱していると思うと私は続行する方法を見つけ出すことはできません。

答えて

2

これまではOKと思われますが、次に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(data)); 
    QJsonObject jsonReply = jsonDoc.object(); 

    QJsonObject response = jsonReply["response"].toObject(); 
    QJsonArray data  = jsonReply["data"].toArray(); 
    qDebug() << data; 

が、それは次のようになります

+0

最初のコンパイラエラー: '不完全な型の無効な使用 'クラスQNetworkReply' QByteArray data = reply-> readAll();'修正方法がわかりません。 軽微なエラー: '#include 'と2回の 'data'変数宣言 –

+0

こんにちは、私はあなたがコンパイルできるようにする必要があり、重複した名前を変更しました。 – Marco

0

あなたのハンドラを動作するかどうか、私に教えてください:

void SyncthingConnection::readConfig() 
{ 
    auto *const reply = static_cast<QNetworkReply *>(sender()); 
    reply->deleteLater(); 

    switch (reply->error()) { 
    case QNetworkReply::NoError: { 
     const QByteArray response(reply->readAll()); 
     QJsonParseError jsonError; 
     const QJsonDocument replyDoc = QJsonDocument::fromJson(response, &jsonError); 
     if (jsonError.error != QJsonParseError::NoError) { 
      emitError(tr("Unable to parse Syncthing config: "), jsonError, reply, response); 
      handleFatalConnectionError(); 
      return; 
     } 

     m_rawConfig = replyDoc.object(); 
     emit newConfig(m_rawConfig); 
     m_hasConfig = true; 
     concludeReadingConfigAndStatus(); 
     break; 
    } 
    case QNetworkReply::OperationCanceledError: 
     return; // intended, not an error 
    default: 
     emitError(tr("Unable to request Syncthing config: "), SyncthingErrorCategory::OverallConnection, reply); 
     handleFatalConnectionError(); 
    } 
} 

この例では、両方のためにエラー処理が含ま - ネットワーキングとJSONの解析を。それはhttps://github.com/Martchus/syncthingtray/blob/master/connector/syncthingconnection.cpp#L907から取られます。

そこにはQtのでJSONをパースについての良いドキュメントが実際にある:http://doc.qt.io/qt-5/json.html

はまた、シグナルに&スロットを接続するための新しい構文を見てみましょう。

関連する問題