From 89ef515177fd5a0b5d95dcffd5fd0b0669e3625a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 5 Sep 2013 07:55:49 +0200 Subject: Add JSON parsing support to qmake. Add qjson* implementation files from corelib/json to the qmake build. Add a read-only compile mode, enabled by defining QT_JSON_READONLY. Add qmake built-in function parseJson(file, into) which parses a json file into the given variable. qmake uses a flat key -> value-list implementation for storing variables, which means that some hackery is need to represent arbitrarily nested JSON. Use a special "_KEYS_" variable for arrays and objects: Arrays: ["item1", "item2"] $${array._KEYS_} -> 0 1 2 $${array.0} -> "item1" $${array.1} -> "item2" Objects: { "key1" : "value1", "key2" : "value2" } $${object._KEYS_} -> key1 key2 $${object.key1} -> value1 $${object.key2} -> value2 Change-Id: I0aa2e4e4ae14fa25be8242bc16d3cffce32504d2 Reviewed-by: Lars Knoll --- src/corelib/json/qjsonarray.cpp | 2 +- src/corelib/json/qjsonarray.h | 2 +- src/corelib/json/qjsondocument.cpp | 6 +++++- src/corelib/json/qjsondocument.h | 4 ++-- src/corelib/json/qjsonobject.cpp | 2 +- src/corelib/json/qjsonobject.h | 2 +- src/corelib/json/qjsonvalue.cpp | 2 +- src/corelib/json/qjsonvalue.h | 2 +- 8 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src/corelib/json') diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp index 8dd7f6092f..d81de89628 100644 --- a/src/corelib/json/qjsonarray.cpp +++ b/src/corelib/json/qjsonarray.cpp @@ -1089,7 +1089,7 @@ void QJsonArray::compact() } -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) QDebug operator<<(QDebug dbg, const QJsonArray &a) { if (!a.a) { diff --git a/src/corelib/json/qjsonarray.h b/src/corelib/json/qjsonarray.h index 1474ccae41..562e6accd7 100644 --- a/src/corelib/json/qjsonarray.h +++ b/src/corelib/json/qjsonarray.h @@ -211,7 +211,7 @@ private: QJsonPrivate::Array *a; }; -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &); #endif diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 4806ac68d6..6e257df39d 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -303,10 +303,12 @@ QVariant QJsonDocument::toVariant() const \sa fromJson() */ +#ifndef QT_JSON_READONLY QByteArray QJsonDocument::toJson() const { return toJson(Indented); } +#endif /*! \enum QJsonDocument::JsonFormat @@ -338,6 +340,7 @@ QByteArray QJsonDocument::toJson() const \sa fromJson(), JsonFormat */ +#ifndef QT_JSON_READONLY QByteArray QJsonDocument::toJson(JsonFormat format) const { if (!d) @@ -352,6 +355,7 @@ QByteArray QJsonDocument::toJson(JsonFormat format) const return json; } +#endif /*! Parses a UTF-8 encoded JSON document and creates a QJsonDocument @@ -562,7 +566,7 @@ bool QJsonDocument::isNull() const return (d == 0); } -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) QDebug operator<<(QDebug dbg, const QJsonDocument &o) { if (!o.d) { diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h index 0354262e2c..ea42d76b20 100644 --- a/src/corelib/json/qjsondocument.h +++ b/src/corelib/json/qjsondocument.h @@ -117,7 +117,7 @@ public: #ifdef Q_QDOC QByteArray toJson(JsonFormat format = Indented) const; -#else +#elif !defined(QT_JSON_READONLY) QByteArray toJson() const; //### Merge in Qt6 QByteArray toJson(JsonFormat format) const; #endif @@ -148,7 +148,7 @@ private: QJsonPrivate::Data *d; }; -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); #endif diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/json/qjsonobject.cpp index 362d01384e..afc0d5f71f 100644 --- a/src/corelib/json/qjsonobject.cpp +++ b/src/corelib/json/qjsonobject.cpp @@ -1036,7 +1036,7 @@ void QJsonObject::setValueAt(int i, const QJsonValue &val) insert(e->key(), val); } -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) QDebug operator<<(QDebug dbg, const QJsonObject &o) { if (!o.o) { diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h index 8226b614b4..ad3184b1f2 100644 --- a/src/corelib/json/qjsonobject.h +++ b/src/corelib/json/qjsonobject.h @@ -206,7 +206,7 @@ private: QJsonPrivate::Object *o; }; -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &); #endif diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index 8aa1f654c6..0a603b958a 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -661,7 +661,7 @@ QJsonValue QJsonValueRef::toValue() const return o->valueAt(index); } -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) QDebug operator<<(QDebug dbg, const QJsonValue &o) { switch (o.t) { diff --git a/src/corelib/json/qjsonvalue.h b/src/corelib/json/qjsonvalue.h index b18bbde0f7..c0ecdd2b61 100644 --- a/src/corelib/json/qjsonvalue.h +++ b/src/corelib/json/qjsonvalue.h @@ -179,7 +179,7 @@ private: uint index : 31; }; -#ifndef QT_NO_DEBUG_STREAM +#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &); #endif -- cgit v1.2.3