You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者科瓦爾斯基約翰

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:15:06