65 lines
1.7 KiB
C++
65 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);
|
||
|
|
}
|
||
|
|
}
|