Работа с JSON в Qt C++ с использованием QJson

Автор: | 7 июня, 2025

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 и проверяйте типы значений перед их использованием, чтобы избежать сбоев.