2016-05-20 4 views
0

У меня есть этот код, который должен получить данные страны с этой страницы (http://ipinfo.io/json):Qt не удается получить данные из QJsonObject

{ 
QByteArray rawData; 
QString countryIp; 
if (rep->error() == QNetworkReply::NoError) 
    rawData = rep->readAll(); 
QJsonDocument jsonResponse(QJsonDocument::fromJson(rawData)); 
QJsonObject jsonObject = jsonResponse.object(); 
countryIp = jsonObject["country"].toString(); 
qDebug() << countryIp; 
} 

Но на самом деле все, что я получил от этого кода является пробел. Я не могу найти, где ошибка.

ответ

0

Вы пытаетесь создать QJsonDocument и преобразовать его в другие типы без проверки того, что данные действительны/не пусты.

QString readJsonData(QNetworkReply *rep) 
{ 
    QByteArray rawData; 
    QString countryIp; 

    //return if there was an error 
    if (rep->error() != QNetworkReply::NoError) 
     return countryIp; 
    rawData = rep->readAll(); 

    QJsonDocument jsonResponse(QJsonDocument::fromJson(rawData)); 
    //Check that the JSON is valid and can be converted to QJsonObject 
    if (jsonResponse.isNull() || !jsonResponse.isObject()) 
     return countryIp; 

    QJsonObject jsonObject = jsonResponse.object(); 
    //And finally check that it contains the value you need 
    if (!jsonObject.contains("country") 
     return countryIp; 
    countryIp = jsonObject["country"].toString(); 
     qDebug() << countryIp; 
    } 
    return countryIp; 
} 

Вы в основном просто нужна проверка, как вы идете преобразование данных, чтобы убедиться, что вы не получаете мусор или неопределенные/пустые объекты. Затем вы можете отлаживать и находить, где проблема.

+0

Спасибо за помощь, но после добавления всех проверок кода он нигде не останавливается и просто продолжает печатать пустое место. – filcitheking

+0

На самом деле это бросило мне ошибку: QNetworkReply :: error received \t ProtocolUnknownError (301) – filcitheking

+0

И теперь вы нашли свою проблему. :-) –