Как создать json файл qt
А дело было так: мне для нужен простой способ сохранять некую информацию в своей проге, эта информация имеет подкатегории тк кк записывается несколько раз в день. Тк вот было бы удобно если бы дата записывалась в категорию, а вся инфа в подкатегории этой даты.
Ну например так (инфа абсолютно рандомна и не имеет смысла):
Итак при первом взгляде на это безобразие становиться абсолютно не понятно что тут и для чего.
Для работы с JSON в Qt сделано целых 7 классов, когда мне всего лишь нужно сделать удобно читаемый список с подкатегориями.
Для этой цели неплохо бы подошел ini который использовать на порядок проще тк кк ini как раз содержит [Категорию] и значение в ней. Но по необъяснимым причинам ini в Qt не умеет в кирилицу, и чтобы я не делал я получаю кракозябры(в гугле выясняется что это действительно существующая проблема и тролтеч забили на все кроме латиницы)
Итак начнем с QJsonValue.
QJsonValue это просто одно значение json которое может быть следующих форматов
Далее уже что-то полезное QJsonObject.
QJsonObject это одна или несколько пар ключ::значение в одном из вышеупомянутых форматов.
Вот пример использования
jsonObj будет выглядеть так
Также добавлять значения можно так
Идем по нарастающей теперь QJsonArray.
QJsonArray это как нетрудно догадаться массив из QJsonObject
Добавим в него по отдельности 2 предыдущих примера.
И тадаам теперь они оба тут
Все это до сих пор не то, мне то нужны подкатегории, а не безымянные блоки данных. И тут в игру вступает немного магии, также как QJsonArray может содержать в себе несколько QJsonObject, так и QJsonObject может содержать в себе несколько QJsonObject. То есть с логической точки зрения мы будем по ключю хранить не значение, а другой объект со значениями.
Попробуем дать обоим блокам названия:
Итак получается мы создаем глобальный объект GBjsonObj и помещаем в него 2 других объекта по ключам name и age и получаем то что и требовалось
Для скорости работы функций парсинга json автоматически сортируется по алфавиту.
Ну и пожалуй самое основное — сохранение и загрузка
Для этого нам потребуется уже четвертый Qt класс QJsonDocument.
QJsonDocument как бы хранит в себе всю структуру нашего JSON, редактировать его напрямую нельзя, мы только можем поместить в него массив или объект:
Или обратно достать из документа объект:
Напишем 2 простейшие функции для работы с файлами load и save.
load() будет принимать название или путь к файлу, и возвращать json документ, Ну а save разумеется принимать документ и название/путь.
Ну и теперь как это выглядит на практике:
Ну пожалуй все. Может быть когда-нибудь напишу статью как все это дело парсить, но помойму это очевидно прямо из последнего примера.
У всех этих четырех объектов есть также куча классных методов и свойст типа
is(Любой типа данных) для проверки типа данных
isEmpty для проверки на пустоту
toVariantHash() toVariantMap() size() length() find(const QString &key)
contains(QLatin1String key) swap(QJsonObject &other) toBinaryData() toJson()
Читайте также: