// return true if item modified static bool convertFromJsonStyleInPlace(QVariant *in) { // Map -> Hash // String -> ByteArray (UTF-8) bool changed = false; int type = in->type(); if(type == QVariant::Map) { QVariantHash vhash; QVariantMap vmap = in->toMap(); QMapIterator<QString, QVariant> it(vmap); while(it.hasNext()) { it.next(); QVariant i = it.value(); convertFromJsonStyleInPlace(&i); vhash[it.key()] = i; } *in = vhash; changed = true; } else if(type == QVariant::List) { QVariantList vlist = in->toList(); for(int n = 0; n < vlist.count(); ++n) { QVariant i = vlist.at(n); convertFromJsonStyleInPlace(&i); vlist[n] = i; } *in = vlist; changed = true; } else if(type == QVariant::String) { *in = QVariant(in->toString().toUtf8()); changed = true; } else if(type != QVariant::Bool && type != QVariant::Double && in->canConvert(QVariant::Int)) { *in = in->toInt(); changed = true; } return changed; }
static QVariant convertFromJsonStyle(const QVariant &in) { QVariant v = in; convertFromJsonStyleInPlace(&v); return v; }