diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2011-11-24 21:11:37 +0100 |
---|---|---|
committer | Knoll Lars <lars.knoll@nokia.com> | 2011-11-25 12:54:24 +0100 |
commit | b786a71a0b62a125d48bb01175cd4995bdc54229 (patch) | |
tree | 451b55ab83ccf3a615757347a645c3460af9bebd | |
parent | e6f0fe0a01325c57c85c72debd41216d15e22808 (diff) |
Added support for converting to QVariantMap
Change-Id: Ib0081e73f48c0904d2f08ee97f54f14206423564
Reviewed-by: Knoll Lars <lars.knoll@nokia.com>
-rw-r--r-- | src/qbinaryjsonarray.cpp | 11 | ||||
-rw-r--r-- | src/qbinaryjsonarray.h | 1 | ||||
-rw-r--r-- | src/qbinaryjsonobject.cpp | 7 | ||||
-rw-r--r-- | src/qbinaryjsonvalue.cpp | 21 | ||||
-rw-r--r-- | src/qbinaryjsonvalue.h | 1 | ||||
-rw-r--r-- | tests/auto/tst_qtbinaryjson.cpp | 23 |
6 files changed, 62 insertions, 2 deletions
diff --git a/src/qbinaryjsonarray.cpp b/src/qbinaryjsonarray.cpp index 86c0938..1f36bfc 100644 --- a/src/qbinaryjsonarray.cpp +++ b/src/qbinaryjsonarray.cpp @@ -63,6 +63,17 @@ JsonArray JsonArray::fromVariantList(const QVariantList &list) return array; } +QVariantList JsonArray::toVariantList() const +{ + QVariantList list; + + if (a) { + for (int i = 0; i < (int)a->length; ++i) + list.append(JsonValue(d, a->at(i)).toVariant()); + } + return list; +} + int JsonArray::size() const { diff --git a/src/qbinaryjsonarray.h b/src/qbinaryjsonarray.h index 3c1342c..6b36d22 100644 --- a/src/qbinaryjsonarray.h +++ b/src/qbinaryjsonarray.h @@ -19,6 +19,7 @@ public: static JsonArray fromStringList(const QStringList &list); static JsonArray fromVariantList(const QVariantList &list); + QVariantList toVariantList() const; int size() const; JsonValue at(int i) const; diff --git a/src/qbinaryjsonobject.cpp b/src/qbinaryjsonobject.cpp index 658e5b3..a4e3c9a 100644 --- a/src/qbinaryjsonobject.cpp +++ b/src/qbinaryjsonobject.cpp @@ -74,7 +74,12 @@ JsonObject JsonObject::fromVariantMap(const QVariantMap &map) QVariantMap JsonObject::toVariantMap() const { - + QVariantMap map; + for (uint i = 0; i < o->length; ++i) { + Entry *e = o->entryAt(i); + map.insert(e->key(), JsonValue(d, e->value()).toVariant()); + } + return map; } diff --git a/src/qbinaryjsonvalue.cpp b/src/qbinaryjsonvalue.cpp index 3f78a06..3483596 100644 --- a/src/qbinaryjsonvalue.cpp +++ b/src/qbinaryjsonvalue.cpp @@ -126,6 +126,27 @@ JsonValue JsonValue::fromVariant(const QVariant &variant) return JsonValue(string); } +QVariant JsonValue::toVariant() const +{ + ValueType type = v ? (ValueType)v->type : NullValue; + + switch (type) { + case BooleanValue: + return v->toBoolean(); + case NumberValue: + return v->toNumber(); + case StringValue: + return v->string(); + case ArrayValue: + return JsonArray(d, v->array()).toVariantList(); + case ObjectValue: + return JsonObject(d, v->object()).toVariantMap(); + case NullValue: + break; + } + return QVariant(); +} + ValueType JsonValue::type() { diff --git a/src/qbinaryjsonvalue.h b/src/qbinaryjsonvalue.h index e3ca1b5..3463286 100644 --- a/src/qbinaryjsonvalue.h +++ b/src/qbinaryjsonvalue.h @@ -23,6 +23,7 @@ public: JsonValue &operator =(const JsonValue &other); static JsonValue fromVariant(const QVariant &variant); + QVariant toVariant() const; ValueType type(); diff --git a/tests/auto/tst_qtbinaryjson.cpp b/tests/auto/tst_qtbinaryjson.cpp index b0c00ab..dd7950b 100644 --- a/tests/auto/tst_qtbinaryjson.cpp +++ b/tests/auto/tst_qtbinaryjson.cpp @@ -416,7 +416,28 @@ void TestQtBinaryJson::fromVariantMap() void TestQtBinaryJson::toVariantMap() { - + JsonObject object; + object.insert("Key", QString("Value")); + object.insert("null", JsonValue()); + JsonArray array; + array.append(true); + array.append(999.); + array.append(QLatin1String("string")); + array.append(JsonValue()); + object.insert("Array", array); + + QVariantMap map = object.toVariantMap(); + + QCOMPARE(map.size(), 3); + QCOMPARE(map.value("Key"), QVariant(QString("Value"))); + QCOMPARE(map.value("null"), QVariant()); + QCOMPARE(map.value("Array").type(), QVariant::List); + QVariantList list = map.value("Array").toList(); + QCOMPARE(list.size(), 4); + QCOMPARE(list.at(0), QVariant(true)); + QCOMPARE(list.at(1), QVariant(999.)); + QCOMPARE(list.at(2), QVariant(QLatin1String("string"))); + QCOMPARE(list.at(3), QVariant()); } |