[英]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.