好吧,我发现了一些我不了解的东西。我正在使用QtNetworkManager向Web服务发出请求。由于某种原因,我似乎无法直接从网络响应转到jsondoc,我必须将其转换为字符串,然后返回至uft8?
void WebAPIengine::handleNetworkData(QNetworkReply *networkReply)
{
//No network error
if (!networkReply->error()){
//Cast to string
QString strReply = (QString)networkReply->readAll();
//This works, jsonDoc will have the json response from webpage
QJsonDocument jsonDoc = QJsonDocument::fromJson(strReply.toUtf8());
//This doesn't work, networkReply->readAll() is said to return a QByteArray.
QJsonDocument jsonDoc2 = QJsonDocument::fromBinaryData(networkReply->readAll());
QJsonObject jsonObj = jsonDoc.object();
data = jsonObj;
}
//Network error
else{
data["Error"] = "WebAPIengine::handleNetworkData()";
}
现在我不明白为什么jsonDoc工作,而jsonDoc2不工作。有人可以解释吗?
最佳答案
完成QNetworkReply->readAll()
后,QNetworkReply
对象将为空。因此,如果再次调用QNetworkReply->readAll()
方法,将不会得到任何结果。
此外,我不明白您为什么要将QByteArray
返回的QNetworkReply->readAll()
转换为QString
,然后将其转换回QByteArray
(通过调用QString::toUtf8()
)以将其提供给QJsonDocument::fromJson
函数。
您可以尝试这样做:
QByteArray temp = newReply->readAll();
QJsonDocument jsonDoc = QJsonDocument::fromJson(temp); // This should work
还要确保知道JSon文档的内容是什么,即它是一个映射(
QJsonObject
),数组(QJSonArray
),映射数组还是以数组为值的映射。