Qt无法从QJsonObject获取数据

时间:2016-05-20 12:29:35

标签: json qt

我有这段代码,应该从此页面获取国家/地区信息(http://ipinfo.io/json):

{
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;
} 

但实际上我从这段代码中得到的只是一个空白区域。我无法找到错误的地方。

1 个答案:

答案 0 :(得分: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;
}

您基本上只需要在转换数据时进行检查,以验证您没有收到垃圾或空/空对象。然后你可以调试并找到问题所在。