Files
Project-Orion/src/Project-Orion/serialization.cpp
alex d479a5e242 Implemented JSON serialization
Added new iterator and const_iterator objects to UserList and also
implemented the serialization function to write to a JSON file
2025-02-07 23:06:27 +02:00

62 lines
1.7 KiB
C++

#include "serialization.h"
#include <filesystem>
#include <QFile>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
UserList loadUserList(const QString &file)
{
QFile doc{std::filesystem::path{file.toStdString()}};
doc.open(QFile::ReadOnly);
QString fileContents = doc.readAll();
QJsonParseError errors;
QJsonDocument document =
QJsonDocument::fromJson(fileContents.toUtf8(),
&errors);
if (document.isNull())
{
qDebug() << errors.errorString();
throw std::runtime_error{"Could not parse JSON file"};
}
QJsonArray array = document.array();
QVector<User> container;
for (QJsonArray::const_iterator elem = array.constBegin(); elem != array.constEnd(); ++elem)
{
auto obj = elem->toObject();
User newUser{obj[NAME_LABEL].toString(), QDate::fromString(obj[DATE_OF_BIRTH_LABEL].toString()),
QDate::fromString(obj[DATE_OF_DEATH_LABEL].toString()), obj[DEFAULT_LABEL].toBool()};
container.append(newUser);
}
return container;
}
void saveUserList(const UserList &list, const QString &file)
{
QFile doc{std::filesystem::path{file.toStdString()}};
doc.open(QFile::WriteOnly);
QJsonArray container;
for(auto &obj: list)
{
QJsonObject newObject;
newObject[NAME_LABEL] = obj.getName();
newObject[DATE_OF_BIRTH_LABEL] = obj.getDateOfBirth().toString();
newObject[DATE_OF_DEATH_LABEL] = obj.getDateOfDeath().toString();
newObject[DEFAULT_LABEL] = obj.getIsItDefault();
container.append(newObject);
}
QJsonDocument document{container};
doc.write(document.toJson());
}