From e9d39454dc1a6ffde25473f81199ca5d30dccac0 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 18 Apr 2016 08:26:38 +0200 Subject: [PATCH] Updated qt-json library. --- src/qt-json/json.cpp | 10 +++++----- src/qt-json/json.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/qt-json/json.cpp b/src/qt-json/json.cpp index 1aa505b87..e276ee2c6 100755 --- a/src/qt-json/json.cpp +++ b/src/qt-json/json.cpp @@ -41,7 +41,7 @@ namespace QtJson { template QByteArray serializeMap(const T &map, bool &success) { - QByteArray str = "{ "; + QByteArray str = "{"; QList pairs; for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) { QByteArray serializedValue = serialize(it.value()); @@ -49,11 +49,11 @@ namespace QtJson { success = false; break; } - pairs << sanitizeString(it.key()).toUtf8() + " : " + serializedValue; + pairs << sanitizeString(it.key()).toUtf8() + ":" + serializedValue; } - str += join(pairs, ", "); - str += " }"; + str += join(pairs, ","); + str += "}"; return str; } @@ -168,7 +168,7 @@ namespace QtJson { values << serializedValue; } - str = "[ " + join( values, ", " ) + " ]"; + str = "[" + join( values, "," ) + "]"; } else if (data.type() == QVariant::Hash) { // variant is a hash? str = serializeMap<>(data.toHash(), success); } else if (data.type() == QVariant::Map) { // variant is a map? diff --git a/src/qt-json/json.h b/src/qt-json/json.h index 728328166..8992508a2 100755 --- a/src/qt-json/json.h +++ b/src/qt-json/json.h @@ -129,6 +129,50 @@ namespace QtJson { */ QString getDateTimeFormat(); QString getDateFormat(); + + /** + * QVariant based Json object + */ + class Object : public QVariant { + template + Object& insertKey(Object* ptr, const QString& key) { + T* p = (T*)ptr->data(); + if (!p->contains(key)) p->insert(key, QVariant()); + return *reinterpret_cast(&p->operator[](key)); + } + template + void removeKey(Object *ptr, const QString& key) { + T* p = (T*)ptr->data(); + p->remove(key); + } + public: + Object() : QVariant() {} + Object(const Object& ref) : QVariant(ref) {} + + Object& operator=(const QVariant& rhs) { + setValue(rhs); + return *this; + } + Object& operator[](const QString& key) { + if (type() == QVariant::Map) + return insertKey(this, key); + else if (type() == QVariant::Hash) + return insertKey(this, key); + + setValue(QVariantMap()); + + return insertKey(this, key); + } + const Object& operator[](const QString& key) const { + return const_cast(this)->operator[](key); + } + void remove(const QString& key) { + if (type() == QVariant::Map) + removeKey(this, key); + else if (type() == QVariant::Hash) + removeKey(this, key); + } + }; } #endif //JSON_H