Qt中如何将QJsonValue转为字符串以输出Bid value is xxx格式内容
问题解决方法
错误原因
你遇到的QJsonValue to non-scalar type QJsonObject requested错误,是因为JSON返回结果中的_quote字段是字符串类型,不是对象类型,你尝试将字符串类型的QJsonValue强制转换为QJsonObject,触发了类型不匹配的错误。
修正后完整代码
QNetworkRequest request = QNetworkRequest(QUrl("https://api.30.bossa.pl/API/GPW/v2/Q/C/_cat_name/WIG20?_t=1637005413888")); QNetworkReply* reply = m_manager.get(request); QObject::connect(reply, &QNetworkReply::finished, [reply]() { // 先校验请求是否正常 if (reply->error() != QNetworkReply::NoError) { qDebug() << "接口请求错误:" << reply->errorString(); reply->deleteLater(); return; } QByteArray rawData = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(rawData); // 校验JSON格式合法性 if (!doc.isObject()) { reply->deleteLater(); return; } QJsonObject rootObj = doc.object(); QJsonArray _d = rootObj.value("_d").toArray(); if (_d.isEmpty()) { reply->deleteLater(); return; } QJsonArray _t = _d[0].toObject().value("_t").toArray(); if (_t.isEmpty()) { reply->deleteLater(); return; } // 直接取出_quote字段转字符串即可,不需要转QJsonObject QJsonValue quoteValue = _t[0].toObject().value("_quote"); qDebug() << "Bid value is" << quoteValue.toString(); reply->deleteLater(); });
实现说明
- 新增了请求异常、JSON格式合法性、数组非空的校验逻辑,避免异常场景下程序崩溃
- 不需要对
_quote字段做QJsonObject转换,直接调用QJsonValue::toString()方法即可拿到对应的报价字符串,即可输出你需要的格式
内容的提问来源于stack exchange,提问作者科瓦爾斯基約翰
相关产品推荐
相关产品推荐

