#include "jsonparser.h" #include #include #include "../model/metadata.h" QList> JsonParser::toItemValuesList(const QByteArray& jsonData, const QString& objectName) { QList> result; if (jsonData.isEmpty()) { return result; } QJsonArray itemArray = extractItemArray(jsonData, objectName); foreach (QJsonValue value, itemArray) { QJsonObject itemJsonObject = value.toObject(); QHash values = jsonObjectToItemValues(itemJsonObject); result.append(values); } return result; } QHash JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) { QHash values; // TODO make this more generic (by reading from model meta data) 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; }