|
@@ -17,7 +17,7 @@ static QVariantMap JsonToMap(const JsonMap & json)
|
|
|
QVariantMap map;
|
|
QVariantMap map;
|
|
|
for(auto & entry : json)
|
|
for(auto & entry : json)
|
|
|
{
|
|
{
|
|
|
- map.insert(QString::fromUtf8(entry.first.c_str()), JsonUtils::toVariant(entry.second));
|
|
|
|
|
|
|
+ map.insert(QString::fromStdString(entry.first), JsonUtils::toVariant(entry.second));
|
|
|
}
|
|
}
|
|
|
return map;
|
|
return map;
|
|
|
}
|
|
}
|
|
@@ -61,23 +61,18 @@ QVariant toVariant(const JsonNode & node)
|
|
|
{
|
|
{
|
|
|
switch(node.getType())
|
|
switch(node.getType())
|
|
|
{
|
|
{
|
|
|
- break;
|
|
|
|
|
case JsonNode::JsonType::DATA_NULL:
|
|
case JsonNode::JsonType::DATA_NULL:
|
|
|
return QVariant();
|
|
return QVariant();
|
|
|
- break;
|
|
|
|
|
case JsonNode::JsonType::DATA_BOOL:
|
|
case JsonNode::JsonType::DATA_BOOL:
|
|
|
return QVariant(node.Bool());
|
|
return QVariant(node.Bool());
|
|
|
- break;
|
|
|
|
|
case JsonNode::JsonType::DATA_FLOAT:
|
|
case JsonNode::JsonType::DATA_FLOAT:
|
|
|
- case JsonNode::JsonType::DATA_INTEGER:
|
|
|
|
|
return QVariant(node.Float());
|
|
return QVariant(node.Float());
|
|
|
- break;
|
|
|
|
|
|
|
+ case JsonNode::JsonType::DATA_INTEGER:
|
|
|
|
|
+ return QVariant{static_cast<qlonglong>(node.Integer())};
|
|
|
case JsonNode::JsonType::DATA_STRING:
|
|
case JsonNode::JsonType::DATA_STRING:
|
|
|
- return QVariant(QString::fromUtf8(node.String().c_str()));
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ return QVariant(QString::fromStdString(node.String()));
|
|
|
case JsonNode::JsonType::DATA_VECTOR:
|
|
case JsonNode::JsonType::DATA_VECTOR:
|
|
|
return JsonToList(node.Vector());
|
|
return JsonToList(node.Vector());
|
|
|
- break;
|
|
|
|
|
case JsonNode::JsonType::DATA_STRUCT:
|
|
case JsonNode::JsonType::DATA_STRUCT:
|
|
|
return JsonToMap(node.Struct());
|
|
return JsonToMap(node.Struct());
|
|
|
}
|
|
}
|
|
@@ -87,34 +82,31 @@ QVariant toVariant(const JsonNode & node)
|
|
|
QVariant JsonFromFile(QString filename)
|
|
QVariant JsonFromFile(QString filename)
|
|
|
{
|
|
{
|
|
|
QFile file(filename);
|
|
QFile file(filename);
|
|
|
- file.open(QFile::ReadOnly);
|
|
|
|
|
- auto data = file.readAll();
|
|
|
|
|
-
|
|
|
|
|
- if(data.size() == 0)
|
|
|
|
|
|
|
+ if(!file.open(QFile::ReadOnly))
|
|
|
{
|
|
{
|
|
|
- logGlobal->error("Failed to open file %s", filename.toUtf8().data());
|
|
|
|
|
- return QVariant();
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- JsonNode node(reinterpret_cast<const std::byte*>(data.data()), data.size(), filename.toStdString());
|
|
|
|
|
- return toVariant(node);
|
|
|
|
|
|
|
+ logGlobal->error("Failed to open file %s. Reason: %s", qUtf8Printable(filename), qUtf8Printable(file.errorString()));
|
|
|
|
|
+ return {};
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ const auto data = file.readAll();
|
|
|
|
|
+ JsonNode node(reinterpret_cast<const std::byte*>(data.data()), data.size(), filename.toStdString());
|
|
|
|
|
+ return toVariant(node);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
JsonNode toJson(QVariant object)
|
|
JsonNode toJson(QVariant object)
|
|
|
{
|
|
{
|
|
|
JsonNode ret;
|
|
JsonNode ret;
|
|
|
|
|
|
|
|
- if(object.canConvert<QVariantMap>())
|
|
|
|
|
- ret.Struct() = VariantToMap(object.toMap());
|
|
|
|
|
- else if(object.userType() == QMetaType::QString)
|
|
|
|
|
|
|
+ if(object.userType() == QMetaType::QString)
|
|
|
ret.String() = object.toString().toUtf8().data();
|
|
ret.String() = object.toString().toUtf8().data();
|
|
|
- //QStirng can be converted to QVariantList, need to check first
|
|
|
|
|
- else if(object.canConvert<QVariantList>())
|
|
|
|
|
- ret.Vector() = VariantToList(object.toList());
|
|
|
|
|
else if(object.userType() == QMetaType::Bool)
|
|
else if(object.userType() == QMetaType::Bool)
|
|
|
ret.Bool() = object.toBool();
|
|
ret.Bool() = object.toBool();
|
|
|
|
|
+ else if(object.canConvert<QVariantMap>())
|
|
|
|
|
+ ret.Struct() = VariantToMap(object.toMap());
|
|
|
|
|
+ else if(object.canConvert<QVariantList>())
|
|
|
|
|
+ ret.Vector() = VariantToList(object.toList());
|
|
|
|
|
+ else if(object.canConvert<int>())
|
|
|
|
|
+ ret.Integer() = object.toInt();
|
|
|
else if(object.canConvert<double>())
|
|
else if(object.canConvert<double>())
|
|
|
ret.Float() = object.toFloat();
|
|
ret.Float() = object.toFloat();
|
|
|
|
|
|