Описание классa QJson

Автор: | 22 июля, 2019

Все классы JSON основаны на значениях и неявно разделяемых классах.

Поддержка JSON в Qt состоит из следующих классов:

QJsonArray

Массив JSON — это список значений. Этим списком можно манипулировать, вставляя и удаляя QJsonValue из массива. QJsonArray может быть преобразован в и из QVariantList. Можно запросить количество записей с помощью записей size(), insert() и removeAt() и перебрать его содержимое, используя стандартный шаблон итератора C ++. QJsonArray является неявно разделяемым классом и делится данными с документом, из которого он был создан, до тех пор, пока он не изменяется.

QJsonDocument

QJsonDocument — это класс, который упаковывает полный документ JSON и может читать и записывать этот документ как из текстового представления в кодировке UTF-8, так и из собственного двоичного формата Qt. Документ JSON можно преобразовать из его текстового представления в QJsonDocument с помощью QJsonDocument::fromJson().toJson() преобразует его обратно в текст. Парсер очень быстрый и эффективный и преобразует JSON в двоичное представление, используемое Qt. Допустимость проанализированного документа можно узнать с помощью !IsNull(). Документ может быть запрошен относительно того, содержит ли он массив или объект, используя isArray() и isObject(). Массив или объект, содержащиеся в документе, можно извлечь с помощью array() или object(), а затем прочитать или манипулировать ими. Документ также может быть создан из сохраненного двоичного представления с использованием fromBinaryData() или fromRawData().

QJsonParseError

Возвращает тип ошибки, которая произошла во время синтаксического анализа документа JSON.

Перечень ошибок:

QJsonParseError::NoError

Нет ошибок

QJsonParseError::UnterminatedObject

Объект неправильно завершен закрывающей фигурной скобкой

QJsonParseError::MissingNameSeparator

Запятая, разделяющая разные элементы, отсутствует

QJsonParseError::UnterminatedArray

Массив неправильно завершается закрывающей квадратной скобкой

QJsonParseError::IllegalValue

Значение не правильно сформировано

QJsonParseError::IllegalValue

Значение не правильно сформировано

QJsonParseError::TerminationByNumber

Поток ввода закончился при разборе числа

QJsonParseError::IllegalNumber

Число не правильно сформировано

QJsonParseError::IllegalEscapeSequence

На входе произошла недопустимая escape-последовательность

QJsonParseError::IllegalUTF8String

На входе произошла недопустимая последовательность UTF-8

QJsonParseError::UnterminatedString

Строка не закончилась кавычкой

QJsonParseError::MissingObject

Ожидаемый объект не найден

QJsonParseError::DeepNesting

Документ JSON слишком глубоко вложен для синтаксического анализа парсером

QJsonParseError::DocumentTooLarge

Документ JSON слишком велик для синтаксического анализа

QJsonParseError::GarbageAtEnd

Анализируемый документ содержит дополнительные символы мусора в конце

QJsonObject

Объект JSON представляет собой список пар ключ-значение, где ключи являются уникальными строками, а значения представлены QJsonValue. QJsonObject может быть преобразован в и из QVariantMap. Можно запросить количество пар (ключ, значение) с помощью записей size(), insert() и remove() и перебрать его содержимое, используя стандартный шаблон итератора C ++. QJsonObject является неявно разделяемым классом и делится данными с документом, из которого он был создан, до тех пор, пока он не изменяется. Объекты можно конвертировать в текстовый JSON и из него через QJsonDocument.

QJsonObject :: const_iterator

QJsonObject :: const_iterator позволяет перебирать QJsonObject. Если изменить объект QJsonObject при его итерации, необходимо использовать вместо него QJsonObject :: iterator. Как правило, рекомендуется использовать QJsonObject :: const_iterator для неконстантного объекта QJsonObject, если только не нужно изменять объект QJsonObject с помощью итератора. Const-итераторы немного быстрее и улучшают читабельность кода. Конструктор QJsonObject :: const_iterator по умолчанию создает неинициализированный итератор. Необходимо  инициализировать его, используя функцию QJsonObject, такую ​​как QJsonObject :: constBegin(), QJsonObject :: constEnd() или QJsonObject :: find(), прежде чем начинать итерацию. Несколько итераторов могут быть использованы для одного и того же объекта.

QJsonObject::iterator

В отличии от const_iterator позволяет изменять значение (но не ключ), хранящееся под определенным ключом.

QJsonValue

Значение в JSON может быть одним из 6 основных типов: JSON — это формат для хранения структурированных данных.

Имеет 6 основных типов данных:

	bool    QJsonValue::Bool
	double  QJsonValue::Double
	string  QJsonValue::String
	array   QJsonValue::Array
	object  QJsonValue::Object
	null    QJsonValue::Null

Значение может представлять любой из вышеуказанных типов данных. QJsonValue имеет один специальный флаг для представления неопределенных значений. Это можно сделать с помощью isUndefined(). Тип значения можно запросить с помощью type() или методов доступа, таких как isBool(), isString() и так далее. Аналогично, значение может быть преобразовано в тип, сохраненный в нем, используя toBool(), toString() и так далее. Значения строго типизированы внутри и, в отличие от QVariant, не будут пытаться делать неявные преобразования типов. Это подразумевает, что преобразование в тип, который не сохранен в значении, вернет возвращаемое значение по умолчанию.