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