C++ 在qt中从https读取Json
我在qt上写了这段代码,但是当我运行这个项目时,我的输出是“Error” 如何解决我的问题 例如,在这段代码中,我在url中添加了一个地址,我希望从这个url中读取Json,并显示一些信息C++ 在qt中从https读取Json,c++,qt,qt5,qnetworkaccessmanager,qurl,C++,Qt,Qt5,Qnetworkaccessmanager,Qurl,我在qt上写了这段代码,但是当我运行这个项目时,我的输出是“Error” 如何解决我的问题 例如,在这段代码中,我在url中添加了一个地址,我希望从这个url中读取Json,并显示一些信息 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QNetworkAccessManager* nam =
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QNetworkAccessManager* nam = new QNetworkAccessManager(this);
QString test = "ar";
QString test2 = "Hello World";
QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onResult(QNetworkReply*)));
QUrl url("https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20180627T161429Z.7e64c91dd2016a6c.9901da9a44bc324388a2460776ab55b2d72b4c5a&lang=" + test + "&text=" + test2);
QNetworkReply* reply = nam->get(QNetworkRequest(url));
}
void MainWindow::onResult(QNetworkReply *reply)
{
if(reply->error() == QNetworkReply::NoError) {
QStringList propertyNames;
QStringList propertyKeys;
QString strReply = (QString)reply->readAll();
qDebug() << strReply;
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObject = jsonResponse.object();
QJsonArray jsonArray = jsonObject["status"].toArray();
qDebug() << jsonObject["status"].toString();
foreach (const QJsonValue & value, jsonArray)
{
QJsonObject obj = value.toObject();
qDebug() << value.toString();
}
} else {
qDebug() << "ERROR";
}
delete reply;
}
MainWindow::MainWindow(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QNetworkAccessManager*nam=新的QNetworkAccessManager(此);
QString test=“ar”;
QString test2=“你好世界”;
QObject::connect(nam,信号)(完成(QNetworkReply*),
这个插槽(onResult(QNetworkReply*));
QUrl url(“https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20180627T161429Z.7e64c91dd2016a6c.9901da9a44bc324388a2460776ab55b2d72b4c5a&lang=“+test+”&text=“+test2”;
QNetworkReply*reply=nam->get(QNetworkRequest(url));
}
void主窗口::onResult(QNetworkReply*reply)
{
如果(回复->错误()==QNetworkReply::NoError){
QStringList propertyNames;
QStringList propertyKeys;
QString streply=(QString)reply->readAll();
qDebug()添加键值到您必须使用的url,如下所示:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
nam = new QNetworkAccessManager(this);
connect(nam, &QNetworkAccessManager::finished, this, &MainWindow::onResult);
QString lang = "ar";
QString text = "Hello World";
QString key = "trnsl.1.1.20180627T161429Z.7e64c91dd2016a6c.9901da9a44bc324388a2460776ab55b2d72b4c5a";
QUrlQuery query;
query.addQueryItem("key", key);
query.addQueryItem("lang", lang);
query.addQueryItem("text", text);
QUrl url("https://translate.yandex.net/api/v1.5/tr.json/translate");
url.setQuery(query);
qDebug()<< "url: "<< url.toString(QUrl::FullyEncoded);
nam->get(QNetworkRequest(url));
}
void MainWindow::onResult(QNetworkReply *reply){
if(reply->error() == QNetworkReply::NoError){
QByteArray result = reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(result);
QJsonObject obj = jsonResponse.object();
qDebug()<<"code: " << obj["code"].toInt();
qDebug()<<"lang: " << obj["lang"].toString();
QJsonArray array = obj["text"].toArray();
for(const QJsonValue & value : array) {
qDebug()<< "text: " <<value.toString();
}
}
else
qDebug() << "ERROR";
reply->deleteLater();
}
如果修改了生成的url,则它与连接不同:
...&text=Hello World
串联:
...&text=Hello World
编码:
...&text=Hello%20World
@Mohammad我觉得这很奇怪,我已经测试过了。你是完全复制了我的代码还是只是部分修改了它?@Mohammad尝试从以下链接下载该项目:我在github中下载了你的项目,但仍然显示错误。将此url放在你的浏览器中:https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20180627T161429Z.7e64c91dd2016a6c.9901da9a44bc324388a2460776ab55b2d72b4c5a&lang=ar&text=Hello%20World
,你得到了什么?你有什么版本的Qt5?你使用代理吗?它在Linux和Qt 5中正常工作。11I从该链接获得Json,不,我不使用代理。这段代码似乎也在工作。你需要提供回复错误信息除了打印的“错误”之外,显示以下输出:qDebug()Error();