Подскажите пожалуйста как пользоваться QJsonDocument. Я cделал запрос на сервер. Получаю ответ в таком формате:
[{"id":229,"creator":123,"name":"\u0421\u0443\u0431\u0430\u0440\u0438\u043a \u0418\u043c\u043f\u0440\u0435\u0437\u0430 \u0413\u043e\u043d\u043a\u0430"}, {"id":229,"creator":123,"name":"\u0421\u0443\u0431\u0430\u0440\u0438\u043a \u0418\u043c\u043f\u0440\u0435\u0437\u0430 \u0413\u043e\u043d\u043a\u0430"}]
Это массив объектов.
Мне нужно вытащить из ответа: name. В поле name содержаться русские символы представлены символами юникода. В конечном итоге мне нужно получить из ответа значение параметра name на русском языке.
Пробывал такой код, но он не работает, подскажите пожалуйста что не так:
QUrl url(urlStr);
QNetworkRequest request(url);
QEventLoop loop;
QNetworkAccessManager manager;
connect(&manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkReply *reply = manager.get(request);
loop.exec();
QString data = reply->readAll();
QJsonDocument d = QJsonDocument::fromJson(reply->readAll());
QJsonObject root = d.object();
QJsonValue jv = root.value("name");
QString str = jv.toString();
[] обозначают массив в json-формате, поэтому следует .array() метод использовать, а не .object():
QJsonArray array = QJsonDocument::fromJson(json_text).array();
for (const QJsonValue& v : array)
qDebug() << "name: " << v.toObject()["name"].toString();
Полный пример (получить свой внешний ip c https://httpbin.org/ используя Qt):
#include <QCoreApplication>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QNetworkAccessManager manager {&app};
QObject::connect(&manager, &QNetworkAccessManager::finished, [&app] (QNetworkReply* reply) {
if (reply->error() == QNetworkReply::NoError) {
QByteArray json_data = reply->readAll();
qDebug() << "json: " << json_data;
QJsonDocument json_doc = QJsonDocument::fromJson(json_data);
auto data = json_doc.object();
qDebug() << "public ip: " << data["origin"].toString();
app.quit();
} else {
qDebug() << "error: " << reply->error();
app.exit(1);
}
});
manager.get(QNetworkRequest(QUrl("https://httpbin.org/ip")));
return app.exec();
}
Файл read-json.pro:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG += c++11
QT += core
QT -= gui
QT += network
TARGET = read-json
INCLUDEPATH += .
# Input
SOURCES += read-json.cc
Чтобы собрать и запустить:
$ qmake && make && ./read-json
См. также JSON Save Game Example.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники