summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-11-24 21:11:37 +0100
committerKnoll Lars <lars.knoll@nokia.com>2011-11-25 12:54:24 +0100
commitb786a71a0b62a125d48bb01175cd4995bdc54229 (patch)
tree451b55ab83ccf3a615757347a645c3460af9bebd
parente6f0fe0a01325c57c85c72debd41216d15e22808 (diff)
Added support for converting to QVariantMap
Change-Id: Ib0081e73f48c0904d2f08ee97f54f14206423564 Reviewed-by: Knoll Lars <lars.knoll@nokia.com>
-rw-r--r--src/qbinaryjsonarray.cpp11
-rw-r--r--src/qbinaryjsonarray.h1
-rw-r--r--src/qbinaryjsonobject.cpp7
-rw-r--r--src/qbinaryjsonvalue.cpp21
-rw-r--r--src/qbinaryjsonvalue.h1
-rw-r--r--tests/auto/tst_qtbinaryjson.cpp23
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());
}