Qt предоставляет мощные инструменты для работы с JSON через классы QJsonDocument
, QJsonObject
, QJsonArray
и другие. Эти классы позволяют легко сериализовать и десериализовать данные, использовать их в сетевом взаимодействии, хранении настроек и многом другом.
Основные классы
QJsonDocument
— представляет полный JSON-документ.QJsonObject
— представляет объект (ключ-значение).QJsonArray
— представляет массив JSON-значений.QJsonValue
— универсальный контейнер для любого типа значения JSON.
Пример 1: Чтение JSON из строки
QString jsonString = R"( { "name": "Тестовая модель", "version": 1, "enabled": true, "parameters": [1.0, 2.5, 3.75] } )"; QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8()); if (!doc.isNull() && doc.isObject()) { QJsonObject obj = doc.object(); QString name = obj["name"].toString(); int version = obj["version"].toInt(); bool enabled = obj["enabled"].toBool(); QJsonArray params = obj["parameters"].toArray(); qDebug() << "Имя:" << name; qDebug() << "Версия:" << version; qDebug() << "Включено:" << enabled; qDebug() << "Параметры:" << params; }
Пример 2: Создание JSON-объекта вручную
QJsonObject obj; obj["name"] = "Новая модель"; obj["version"] = 2; obj["enabled"] = false; QJsonArray array; array.append(4.0); array.append(5.5); array.append(6.75); obj["parameters"] = array; QJsonDocument doc(obj); QString jsonString = doc.toJson(QJsonDocument::Indented); qDebug() << "Сформированный JSON:"; qDebug().noquote() << jsonString;
Пример 3: Чтение JSON из файла
QFile file("data.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "Не удалось открыть файл!"; return; } QByteArray data = file.readAll(); file.close(); QJsonParseError parseError; QJsonDocument doc = QJsonDocument::fromJson(data, &parseError); if (parseError.error != QJsonParseError::NoError) { qWarning() << "Ошибка разбора JSON:" << parseError.errorString(); return; } QJsonObject obj = doc.object(); qDebug() << "Загруженный объект:" << obj;
Пример 4: Запись JSON в файл
QJsonObject obj; obj["status"] = "ok"; obj["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); QJsonDocument doc(obj); QFile file("output.json"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { file.write(doc.toJson(QJsonDocument::Indented)); file.close(); }
Работа с JSON в Qt C++ с использованием QJsonDocument
и связанных классов интуитивно понятна и эффективна. Вы можете легко обмениваться данными с внешними сервисами, сохранять состояние приложения или строить внутренние конфигурационные файлы. Qt полностью поддерживает как чтение, так и генерацию JSON-документов, что делает его удобным инструментом для современного C++-разработчика.
Совет: всегда проверяйте ошибки при парсинге JSON с помощью QJsonParseError
и проверяйте типы значений перед их использованием, чтобы избежать сбоев.