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