C++ 使用QT发送POST请求并读取Json响应
我是QT开发的新手。我试图对rest服务执行一个简单的Post请求,以便读取Json数据 目前我写了:C++ 使用QT发送POST请求并读取Json响应,c++,json,qt,C++,Json,Qt,我是QT开发的新手。我试图对rest服务执行一个简单的Post请求,以便读取Json数据 目前我写了: void LoginWindow::on_pushButton_clicked(){ // Setup the webservice url QUrl serviceUrl = QUrl("http://urlrestservice.com"); QByteArray postData; postData.append("request=userdata&am
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);
}
从那以后我就不知道该怎么办了。我做了一个空方法
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,但我认为官方文档有点混乱,我不知道如何继续。到目前为止似乎还可以,接下来您应该向ServiceRequistFinished添加一些代码
#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;
#包括
#包括
#包括
#包括
#包括
#包括
void loginWindows::serviceRequestFinished(QNetworkReply*reply){
QByteArray buffer=reply->readAll();
qDebug()您的处理程序可能如下所示:
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();
}
}
void SyncthingConnection::readConfig()
{
auto*const reply=static_cast(sender());
回复->删除稍后();
开关(应答->错误(){
案例QNetworkReply::无错误:{
常量QByteArray响应(reply->readAll());
QJsonParseError jsonError;
const QJsonDocument replyDoc=QJsonDocument::fromJson(响应,&jsonError);
if(jsonError.error!=QJsonParseError::NoError){
emitError(tr(“无法解析同步配置”)、jsonError、reply、response;
HandleCatalConnectionError();
返回;
}
m_rawConfig=replyDoc.object();
emit newConfig(m_rawConfig);
m_hasConfig=true;
结论AdingConfigandStatus();
打破
}
案例QNetworkReply::操作取消错误:
return;//预期的,不是错误
违约:
emitError(tr(“无法请求Syncthing配置”)、SyncthingErrorCategory::OverallConnection、reply);
HandleCatalConnectionError();
}
}
这个例子包括网络和JSON解析的错误处理
关于使用Qt解析JSON,实际上有很多很好的文档:
还可以查看连接信号和插槽的新语法。第一个编译器错误:无效使用不完整的类型“class QNetworkReply”QByteArray data=reply->readAll()
我不知道如何修复。小错误:两次#include
和两次数据
变量声明Hi,我添加了一些include,您需要能够编译和更改重复的名称,请告诉我它是否正在工作。