This repository has been archived on 2025-12-24. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
yachat/third-party/JsonQt/lib/VariantToJson.cpp
2025-12-25 01:38:25 +05:00

64 lines
1.7 KiB
C++

#include "VariantToJson.h"
namespace JsonQt
{
QString VariantToJson::parse(const QVariantMap& data)
{
QStringList members;
for(QVariantMap::ConstIterator it = data.begin(); it != data.end(); ++it)
{
members.append(QString("\"%1\": %2").arg(it.key()).arg(parseElement(it.value())));
}
return "{" + members.join(", ") + "}";
}
QString VariantToJson::parseElement(const QVariant& value)
{
switch(value.type())
{
case QVariant::Bool:
return value.toBool() ? "true" : "false";
case QVariant::Map:
return parse(value.toMap());
case QVariant::Int:
return QString::number(value.toInt());
case QVariant::LongLong:
return QString::number(value.toLongLong());
case QVariant::Double:
return QString::number(value.toDouble());
case QVariant::UInt:
return QString::number(value.toUInt());
case QVariant::ULongLong:
return QString::number(value.toULongLong());
case QVariant::List:
return parseList(value.toList());
case QVariant::String:
return QString("\"%1\"").arg(value.toString().replace("\\", "\\\\").replace("\"", "\\\""));
case QVariant::StringList:
return parseStringList(value.toStringList());
case QVariant::Invalid:
return "null";
default:
return QString();
}
}
QString VariantToJson::parseList(const QVariantList& list)
{
QStringList parts;
Q_FOREACH(QVariant variant, list)
{
parts.append(parseElement(variant));
}
return "[" + parts.join(", ") + "]";
}
QString VariantToJson::parseStringList(const QStringList& stringList)
{
QVariantList variantList;
Q_FOREACH(const QString& string, stringList)
{
variantList.append(string);
}
return parseList(variantList);
}
}