繁体   English   中英

Qt使用网络响应二进制文件解析JSON

[英]Qt parsing json using network response binary

好吧,我发现了一些我不了解的东西。 我正在使用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()方法,将不会获得任何信息。

此外,我不明白为什么您QNetworkReply->readAll()返回的QByteArray转换为QString ,然后将其转换回QByteArray (通过调用QString::toUtf8() )以将其提供给QJsonDocument::fromJson函数。

您可以尝试这样做:

QByteArray temp = newReply->readAll();
QJsonDocument  jsonDoc = QJsonDocument::fromJson(temp); // This should work

另外,还要确保知道JSon文档的内容是什么,即它是一个映射( QJsonObject ),数组( QJSonArray ),映射数组还是以数组为值的映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM