QJsonValue 变空

Posted

技术标签:

【中文标题】QJsonValue 变空【英文标题】:QJsonValue gets empty 【发布时间】:2018-02-24 16:36:51 【问题描述】:

当我向时间 API 发出请求以获取莫斯科时间时,变量中的 int 为空。 代码如下:

QNetworkReply* reply = manager->get(QNetworkRequest(QUrl("https://yandex.com/time/sync.json?geo=213")));
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();

QByteArray data = reply->readAll();
QJsonDocument document = QJsonDocument::fromJson(data);
QJsonObject root = document.object();
qDebug() << data;
qDebug() << root.value("time").toInt();

这是 JSON:

"time":1519489796585,"clocks":"213":"id":213,"name":"Moscow","offset":10800000,"offsetString":"UTC+3:00","showSunriseSunset":true,"sunrise":"07:33","sunset":"17:53","isNight":true,"skyColor":"#3f68b2","weather":"temp":-10,"icon":"ovc","link":"/moscow","parents":["id":225,"name":"Russia"]

【问题讨论】:

time 是自纪元 (1970-01-01) 以来msec 的数量。在所有情况下,您都需要将其转换为QdateTime 【参考方案1】:

如果修改数字:1519490351963,这超过了一个整数的较大值:2147483647,所以没有转换成整数,一个可能的解决办法是把它转换成double:

// qDebug() << root["time"].toDouble();
qDebug() << root.value("time").toDouble();

另一种可能的解决方案是将其转换为QVariant,然后使用toLongLong() 来使用qlonglong,这是一种支持更多位的整数。

//qDebug() << root["time"].toVariant().toLongLong();
qDebug() << root.value("time").toVariant().toLongLong();

【讨论】:

哦,非常感谢!我已经尝试解决这个问题好几个小时了。

以上是关于QJsonValue 变空的主要内容,如果未能解决你的问题,请参考以下文章

QJsonValue 是不是将数字字符串与整数不同?

json对象排序把key中的value值排序

QJsonValue 的转换方法总是返回它们的默认值

-JSONValue 失败

在 iPhone 中收到警告:NSString 可能无法响应“-JSONValue”

-JSONValue 失败。错误是:令牌的非法开始 [']