#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; } 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; } QHash JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) { QHash values; for (auto iter = ROLE_NAMES.cbegin(), end = ROLE_NAMES.cend(); iter != end; ++iter) { std::pair keyValuePair = getKeyValuePair(itemJsonObject, iter.key()); values.insert(keyValuePair.first, keyValuePair.second); } return values; } pair JsonParser::getKeyValuePair(const QJsonObject& itemJsonObject, const int role) { QVariant result; const QJsonValue jsonValue = itemJsonObject[ROLE_NAMES.value(role)]; if (STRING_ROLES.contains(role)) { result = jsonValue.toString(); } else if (INT_ROLES.contains(role)) { result = jsonValue.toInt(); } else if (DOUBLE_ROLES.contains(role)) { result = jsonValue.toDouble(); } else { qCritical() << QString("Cant find data type of role %1!!!").arg(role); } return pair(role, result.toString()); }