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:
parent
2e1de7f3c4
commit
26237f0a2d
@ -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;
|
||||
}
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user