diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index a540626579..3fbc811948 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -384,9 +384,13 @@ QVariant QJsonValue::toVariant() const case String: return toString(); case Array: - return QJsonArray(d, static_cast(base)).toVariantList(); + return d ? + QJsonArray(d, static_cast(base)).toVariantList() : + QVariantList(); case Object: - return QJsonObject(d, static_cast(base)).toVariantMap(); + return d ? + QJsonObject(d, static_cast(base)).toVariantMap() : + QVariantMap(); case Null: case Undefined: break; diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index bdf8c86442..94e6e1129e 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -1062,6 +1062,8 @@ void tst_QtJson::fromVariantMap() void tst_QtJson::toVariantMap() { + QCOMPARE(QMetaType::Type(QJsonValue(QJsonObject()).toVariant().type()), QMetaType::QVariantMap); // QTBUG-32524 + QJsonObject object; QVariantMap map = object.toVariantMap(); QVERIFY(map.isEmpty()); @@ -1091,6 +1093,8 @@ void tst_QtJson::toVariantMap() void tst_QtJson::toVariantList() { + QCOMPARE(QMetaType::Type(QJsonValue(QJsonArray()).toVariant().type()), QMetaType::QVariantList); // QTBUG-32524 + QJsonArray array; QVariantList list = array.toVariantList(); QVERIFY(list.isEmpty());