From 4bb5566632ea6510c67fb8cf28cfe7dd4801488f Mon Sep 17 00:00:00 2001 From: Jean-Paul Delimat Date: Fri, 28 Dec 2012 01:23:16 +0100 Subject: Add toJson() formatting argument to QJsonDocument interface The writer delegate used by QJsonDocument to produce a Json QByteArray supports generating a human readable Json (with spaces and carriage returns that reflect the Json structure) and a less human readable (no spaces nor carriage returns) but more compact Json. The method toJson() was extended with a format argument to support the compact Json generation. Task-number: QTBUG-28815 Change-Id: I8d13849ab9ab6ed7c645011260251dc14a8629d2 Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira Reviewed-by: Debao Zhang --- src/corelib/json/qjsondocument.cpp | 39 ++++++++++++++++++++++++++++++++++++-- src/corelib/json/qjsondocument.h | 13 ++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 550cc76b0d..bdb46528d3 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -302,6 +302,41 @@ QVariant QJsonDocument::toVariant() const \sa fromJson() */ QByteArray QJsonDocument::toJson() const +{ + return toJson(Indented); +} + +/*! + \enum QJsonDocument::JsonFormat + + This value defines the format of the JSON byte array produced + when converting to a QJsonDocument using toJson(). + + \value Indented Defines human readable output as follows: + \code + { + "Array": [ + true, + 999, + "string" + ], + "Key": "Value", + "null": null + } + \endcode + + \value Compact Defines a compact output as follows: + \code + {"Array": [true,999,"string"],"Key": "Value","null": null} + \endcode + */ + +/*! + Converts the QJsonDocument to a UTF-8 encoded JSON document in the provided \a format. + + \sa fromJson(), JsonFormat + */ +QByteArray QJsonDocument::toJson(JsonFormat format) const { if (!d) return QByteArray(); @@ -309,9 +344,9 @@ QByteArray QJsonDocument::toJson() const QByteArray json; if (d->header->root()->isArray()) - QJsonPrivate::Writer::arrayToJson(static_cast(d->header->root()), json, 0); + QJsonPrivate::Writer::arrayToJson(static_cast(d->header->root()), json, 0, (format == Compact)); else - QJsonPrivate::Writer::objectToJson(static_cast(d->header->root()), json, 0); + QJsonPrivate::Writer::objectToJson(static_cast(d->header->root()), json, 0, (format == Compact)); return json; } diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h index 675ee75dbf..0bb21d89cf 100644 --- a/src/corelib/json/qjsondocument.h +++ b/src/corelib/json/qjsondocument.h @@ -109,8 +109,19 @@ public: static QJsonDocument fromVariant(const QVariant &variant); QVariant toVariant() const; + enum JsonFormat { + Indented, + Compact + }; + static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); - QByteArray toJson() const; + +#ifdef Q_QDOC + QByteArray toJson(JsonFormat format = Indented) const; +#else + QByteArray toJson() const; //### Merge in Qt6 + QByteArray toJson(JsonFormat format) const; +#endif bool isEmpty() const; bool isArray() const; -- cgit v1.2.3