好吧,我发现了一些我不明白的东西。我正在使用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却不工作。有人能解释一下吗?
发布于 2014-10-18 06:19:28
执行QNetworkReply->readAll()后,QNetworkReply对象将为空。因此,如果再次调用QNetworkReply->readAll()方法,则不会得到任何信息。
此外,我不明白为什么要将QNetworkReply->readAll()返回的QNetworkReply->readAll()转换为QString,然后将其转换回QByteArray(通过调用QString::toUtf8())将其交给QJsonDocument::fromJson函数。
你可以试着这样做:
QByteArray temp = newReply->readAll();
QJsonDocument jsonDoc = QJsonDocument::fromJson(temp); // This should work还要确保知道JSon文档的内容是什么,即如果它是一个映射(QJsonObject)、数组(QJSonArray)、映射数组或以数组为值的映射。
https://stackoverflow.com/questions/26436752
复制相似问题