2014-10-18 60 views
0

好的,我發現了一些我不明白的東西。我正在使用QtNetworkManager向Web服務發出請求。出於某種原因,我似乎無法直接從網絡響應轉到jsondoc,我必須將其轉換爲字符串,然後返回到uft8中?Qt使用網絡響應二進制解析json

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不是。有人可以解釋嗎?

回答

2

一旦你做了一個QNetworkReply->readAll()QNetworkReply對象將是空的。所以如果你再次調用QNetworkReply->readAll()方法,你什麼也得不到。

而且我不明白爲什麼要轉換由QNetworkReply->readAll()返回QByteArrayQString,然後(通過調用QString::toUtf8())將其轉換回QByteArray給它的QJsonDocument::fromJson功能。

你可以試試這樣做:

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

還要確保知道什麼是JSON文件的內容,即,如果它是一個地圖(QJsonObject),陣列(QJSonArray),地圖的陣列或以數組作爲值映射。

+0

好吧,看起來我在閱讀我的調試器時出錯。這一直在工作,看起來我沒有正確地提取信息。去編輯後安靜了一下。 – Dave851 2014-10-18 06:26:05

+0

並沒有什麼,只是跑了所有的json [「xx」]。isXXX(),並設法弄清楚如何讀回數據。 – Dave851 2014-10-18 06:32:57

+0

好的。很高興知道您修復了它。 – nnb 2014-10-18 06:34:24