bool convertToJsonStyleInPlace(QVariant *in) { // Hash -> Map // ByteArray (UTF-8) -> String bool changed = false; int type = in->type(); if(type == QVariant::Hash) { QVariantMap vmap; QVariantHash vhash = in->toHash(); QHashIterator<QString, QVariant> it(vhash); while(it.hasNext()) { it.next(); QVariant i = it.value(); convertToJsonStyleInPlace(&i); vmap[it.key()] = i; } *in = vmap; changed = true; } else if(type == QVariant::List) { QVariantList vlist = in->toList(); for(int n = 0; n < vlist.count(); ++n) { QVariant i = vlist.at(n); convertToJsonStyleInPlace(&i); vlist[n] = i; } *in = vlist; changed = true; } else if(type == QVariant::ByteArray) { QByteArray buf = in->toByteArray(); if(!buf.isNull()) *in = QString::fromUtf8(buf); else *in = QString(); changed = true; } return changed; }
static QVariant convertToJsonStyle(const QVariant &in) { QVariant v = in; convertToJsonStyleInPlace(&v); return v; }