好吧,我发现了一些我不了解的东西。我正在使用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),映射数组还是以数组为值的映射。

10-02 16:26