Fix QJsonValue::fromVariant() if the variant contains a json object

If the variant contains a known json type (value, array, object or
document), simply unwrap those. In the case of the json document
wrap the contained object/array into a QJsonValue.

This should be the expected behavior, and makes more sense than
returning a null QJsonValue.

Task-number: QTBUG-41234
Change-Id: Id084fc11220d51aaf78b7694fd0ebef1411f5c51
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Lars Knoll 2015-03-20 13:05:43 +01:00 committed by Joerg Bornemann
parent 2e1de7f3c4
commit 26237f0a2d
2 changed files with 18 additions and 0 deletions

View File

@ -420,6 +420,18 @@ QJsonValue QJsonValue::fromVariant(const QVariant &variant)
return QJsonValue(QJsonObject::fromVariantMap(variant.toMap()));
case QVariant::Hash:
return QJsonValue(QJsonObject::fromVariantHash(variant.toHash()));
#ifndef QT_BOOTSTRAPPED
case QMetaType::QJsonValue:
return variant.toJsonValue();
case QMetaType::QJsonObject:
return variant.toJsonObject();
case QMetaType::QJsonArray:
return variant.toJsonArray();
case QMetaType::QJsonDocument: {
QJsonDocument doc = variant.toJsonDocument();
return doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object());
}
#endif
default:
break;
}

View File

@ -1137,6 +1137,12 @@ void tst_QtJson::fromVariant()
QCOMPARE(QJsonValue::fromVariant(QVariant(stringList)), QJsonValue(jsonArray_string));
QCOMPARE(QJsonValue::fromVariant(QVariant(variantList)), QJsonValue(jsonArray_variant));
QCOMPARE(QJsonValue::fromVariant(QVariant(variantMap)), QJsonValue(jsonObject));
QVERIFY(QJsonValue::fromVariant(QVariant(QJsonValue(true))).isBool());
QVERIFY(QJsonValue::fromVariant(QVariant(jsonArray_string)).isArray());
QVERIFY(QJsonValue::fromVariant(QVariant(QJsonDocument(jsonArray_string))).isArray());
QVERIFY(QJsonValue::fromVariant(QVariant(jsonObject)).isObject());
QVERIFY(QJsonValue::fromVariant(QVariant(QJsonDocument(jsonObject))).isObject());
}
void tst_QtJson::fromVariantMap()