gpt4 book ai didi

c++ - 在qt中从https读取Json

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:30 25 4
gpt4 key购买 nike

我在 qt 上写了这段代码,但是当我运行这个项目时,我的输出是“错误”。

如何解决我的问题?

例如,在这段代码中,我在 url 中添加了一个地址,我想从这个 url 中读取 Json,并显示一些信息。

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;
}

最佳答案

要将键值添加到您必须使用的 url 中 QUrlQuery如下图:

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:  "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20180627T161429Z.7e64c91dd2016a6c.9901da9a44bc324388a2460776ab55b2d72b4c5a&lang=ar&text=Hello%20World"
code: 200
lang: "en-ar"
text: "مرحبا العالم"

如果修改生成的url,则与拼接不同:

连接:

...&text=Hello World

编码:

...&text=Hello%20World

关于c++ - 在qt中从https读取Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com