summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuha Vuolle <[email protected]>2024-01-05 05:58:53 +0200
committerJuha Vuolle <[email protected]>2024-01-12 06:37:11 +0200
commit1702a37a3955f449210fe3874cfcd35bb08417ad (patch)
treebd58357c8dde7712313ada0f973e92800fa83969
parentbba26d72207304e02098d1436232357dd452de2a (diff)
Change QRestReply json return type to QJsonDocument
The json return type and function naming has gone back and forth. Let's go with QJsonDocument after all, and add new overloads in future if necessary. Pick-to: 6.7 Task-number: QTBUG-119002 Change-Id: I3f9de0e6cba7d5c52d016d252d65b81f345af050 Reviewed-by: Marc Mutz <[email protected]>
-rw-r--r--src/network/access/qrestreply.cpp54
-rw-r--r--src/network/access/qrestreply.h3
-rw-r--r--src/network/access/qrestreply_p.h1
-rw-r--r--src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp4
-rw-r--r--tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp25
5 files changed, 28 insertions, 59 deletions
diff --git a/src/network/access/qrestreply.cpp b/src/network/access/qrestreply.cpp
index a7366607869..8c575733dc5 100644
--- a/src/network/access/qrestreply.cpp
+++ b/src/network/access/qrestreply.cpp
@@ -153,8 +153,7 @@ void QRestReply::abort()
}
/*!
- Returns the received data as a QJsonObject. Requires the reply to be
- finished.
+ Returns the received data as a QJsonDocument.
The returned value is wrapped in \c std::optional. If the conversion
from the received data fails (empty data or JSON parsing error),
@@ -166,44 +165,24 @@ void QRestReply::abort()
This function returns \c {std::nullopt} and will not consume
any data if the reply is not finished.
- \sa jsonArray(), body(), text(), finished(), isFinished()
+ \sa body(), text(), finished(), isFinished()
*/
-std::optional<QJsonObject> QRestReply::json()
+std::optional<QJsonDocument> QRestReply::json()
{
Q_D(QRestReply);
if (!isFinished()) {
qCWarning(lcQrest, "Attempt to read json() of an unfinished reply, ignoring.");
return std::nullopt;
}
- const QJsonDocument json = d->replyDataToJson();
- return json.isObject() ? std::optional{json.object()} : std::nullopt;
-}
-
-/*!
- Returns the received data as a QJsonArray. Requires the reply to be
- finished.
-
- The returned value is wrapped in \c std::optional. If the conversion
- from the received data fails (empty data or JSON parsing error),
- \c std::nullopt is returned.
-
- Calling this function consumes the received data, and any further calls
- to get response data will return empty.
-
- This function returns \c {std::nullopt} and will not consume
- any data if the reply is not finished.
-
- \sa json(), body(), text(), finished(), isFinished()
-*/
-std::optional<QJsonArray> QRestReply::jsonArray()
-{
- Q_D(QRestReply);
- if (!isFinished()) {
- qCWarning(lcQrest, "Attempt to read jsonArray() of an unfinished reply, ignoring.");
+ QJsonParseError parseError;
+ const QByteArray data = d->networkReply->readAll();
+ const QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);
+ if (parseError.error != QJsonParseError::NoError) {
+ qCDebug(lcQrest) << "Response data not JSON:" << parseError.errorString()
+ << "at" << parseError.offset << data;
return std::nullopt;
}
- const QJsonDocument json = d->replyDataToJson();
- return json.isArray() ? std::optional{json.array()} : std::nullopt;
+ return doc;
}
/*!
@@ -472,19 +451,6 @@ bool QRestReplyPrivate::hasNonHttpError() const
return networkReply->error() != QNetworkReply::NoError;
}
-QJsonDocument QRestReplyPrivate::replyDataToJson()
-{
- QJsonParseError parseError;
- const QByteArray data = networkReply->readAll();
- const QJsonDocument json = QJsonDocument::fromJson(data, &parseError);
-
- if (parseError.error != QJsonParseError::NoError) {
- qCDebug(lcQrest) << "Response data not JSON:" << parseError.errorString()
- << "at" << parseError.offset << data;
- }
- return json;
-}
-
QT_END_NAMESPACE
#include "moc_qrestreply.cpp"
diff --git a/src/network/access/qrestreply.h b/src/network/access/qrestreply.h
index e022a7b853f..02b6d1196d2 100644
--- a/src/network/access/qrestreply.h
+++ b/src/network/access/qrestreply.h
@@ -19,8 +19,7 @@ public:
QNetworkReply *networkReply() const;
- std::optional<QJsonObject> json();
- std::optional<QJsonArray> jsonArray();
+ std::optional<QJsonDocument> json();
QByteArray body();
QString text();
diff --git a/src/network/access/qrestreply_p.h b/src/network/access/qrestreply_p.h
index 7fe0842ff36..5e76b54bcbb 100644
--- a/src/network/access/qrestreply_p.h
+++ b/src/network/access/qrestreply_p.h
@@ -36,7 +36,6 @@ public:
QByteArray contentCharset() const;
bool hasNonHttpError() const;
- QJsonDocument replyDataToJson();
};
QT_END_NAMESPACE
diff --git a/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp b/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp
index fcc8dbaef52..4ef077d0c26 100644
--- a/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp
+++ b/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp
@@ -26,7 +26,7 @@ manager->post(request, myJson, this, [this](QRestReply *reply) {
if (!reply->isSuccess()) {
// ...
}
- if (std::optional<QJsonObject> json = reply->json()) {
+ if (std::optional json = reply->json()) {
// use *json
}
});
@@ -37,7 +37,7 @@ manager->post(request, myJson, this, [this](QRestReply *reply) {
manager->get(request, this, [this](QRestReply *reply) {
if (!reply->isSuccess())
// handle error
- if (std::optional<QJsonObject> json = reply->json())
+ if (std::optional json = reply->json())
// use *json
});
//! [3]
diff --git a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
index 89c5c096599..f46cb6fc115 100644
--- a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
+++ b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
@@ -739,8 +739,7 @@ void tst_QRestAccessManager::json()
QTRY_VERIFY(server.isListening());
QNetworkRequest request(server.url());
QRestReply *replyFromServer = nullptr;
- QJsonObject responseJsonObject;
- QJsonArray responseJsonArray;
+ QJsonDocument responseJsonDocument;
HttpData serverSideRequest; // The request data the server received
HttpData serverSideResponse; // The response data the server responds with
@@ -754,9 +753,12 @@ void tst_QRestAccessManager::json()
serverSideResponse.body = "{\"key1\":\"value1\",""\"key2\":\"value2\"}\n"_ba;
manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; });
QTRY_VERIFY(replyFromServer);
- responseJsonObject = *replyFromServer->json();
- QCOMPARE(responseJsonObject["key1"], "value1");
- QCOMPARE(responseJsonObject["key2"], "value2");
+ std::optional json = replyFromServer->json();
+ QVERIFY(json);
+ responseJsonDocument = *json;
+ QVERIFY(responseJsonDocument.isObject());
+ QCOMPARE(responseJsonDocument["key1"], "value1");
+ QCOMPARE(responseJsonDocument["key2"], "value2");
replyFromServer->deleteLater();
replyFromServer = nullptr;
@@ -772,10 +774,13 @@ void tst_QRestAccessManager::json()
serverSideResponse.body = "[\"foo\", \"bar\"]\n"_ba;
manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; });
QTRY_VERIFY(replyFromServer);
- responseJsonArray = *replyFromServer->jsonArray();
- QCOMPARE(responseJsonArray.size(), 2);
- QCOMPARE(responseJsonArray[0].toString(), "foo"_L1);
- QCOMPARE(responseJsonArray[1].toString(), "bar"_L1);
+ json = replyFromServer->json();
+ QVERIFY(json);
+ responseJsonDocument = *json;
+ QVERIFY(responseJsonDocument.isArray());
+ QCOMPARE(responseJsonDocument.array().size(), 2);
+ QCOMPARE(responseJsonDocument[0].toString(), "foo"_L1);
+ QCOMPARE(responseJsonDocument[1].toString(), "bar"_L1);
replyFromServer->deleteLater();
replyFromServer = nullptr;
@@ -783,7 +788,7 @@ void tst_QRestAccessManager::json()
serverSideResponse.body = "foobar"_ba;
manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; });
QTRY_VERIFY(replyFromServer);
- QVERIFY(!replyFromServer->jsonArray().has_value()); // std::nullopt returned
+ QVERIFY(!replyFromServer->json().has_value()); // std::nullopt returned
replyFromServer->deleteLater();
replyFromServer = nullptr;
}