55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
#include "jsonparser.h"
|
|
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
|
|
#include "../model/metadata.h"
|
|
|
|
QList<QHash<int, QVariant>> JsonParser::toItemValuesList(const QByteArray& jsonData,
|
|
const QString& objectName) {
|
|
QList<QHash<int, QVariant>> result;
|
|
|
|
if (jsonData.isEmpty()) {
|
|
return result;
|
|
}
|
|
|
|
QJsonArray itemArray = extractItemArray(jsonData, objectName);
|
|
|
|
foreach (QJsonValue value, itemArray) {
|
|
QJsonObject itemJsonObject = value.toObject();
|
|
QHash<int, QVariant> values = jsonObjectToItemValues(itemJsonObject);
|
|
result.append(values);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
QHash<int, QVariant> JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
|
|
QHash<int, QVariant> values;
|
|
|
|
// TODO iterate over "public & editable" roles (the ones that should occur in JSON file)
|
|
// & use a (static) function to retrieve it (i. e. getRoleValue(int role))
|
|
values[NameRole] = itemJsonObject[ROLE_NAMES.value(NameRole)].toString();
|
|
values[DescriptionRole] = itemJsonObject[ROLE_NAMES.value(DescriptionRole)].toString();
|
|
values[InfoRole] = itemJsonObject[ROLE_NAMES.value(InfoRole)].toString();
|
|
values[AmountRole] = itemJsonObject[ROLE_NAMES.value(AmountRole)].toInt();
|
|
values[FactorRole] = itemJsonObject[ROLE_NAMES.value(FactorRole)].toDouble();
|
|
|
|
return values;
|
|
}
|
|
|
|
JsonParser::JsonParser() {}
|
|
|
|
QJsonArray JsonParser::extractItemArray(const QByteArray& jsonData, const QString& objectName) {
|
|
QJsonDocument doc = QJsonDocument::fromJson(jsonData);
|
|
QJsonArray itemArray;
|
|
if (objectName.isEmpty()) {
|
|
itemArray = doc.array();
|
|
|
|
} else {
|
|
QJsonObject rootObject = doc.object();
|
|
itemArray = rootObject.value(objectName).toArray();
|
|
}
|
|
|
|
return itemArray;
|
|
}
|