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

Qt请求API解析JSON时出现QJsonValue(undefined)是什么原因?

问题根源

你要提取的_quote_min字段并非JSON根节点的直接属性,而是嵌套在两层数组结构中:

  • 根节点的_d是数组,第一个元素为存放业务数据的对象
  • 该对象下的_t也是数组,第一个元素才是包含_quote_min的行情对象
    你之前直接从根对象调用obj.value("_quote_min")自然找不到对应字段,返回undefined。

修正后的核心代码

{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    QNetworkAccessManager m_manager;
    // make request
    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);
        QJsonObject rootObj = doc.object();

        // 逐层解析嵌套结构
        QJsonArray dArr = rootObj.value("_d").toArray();
        if (dArr.isEmpty()) {
            qDebug() << "返回数据中_d数组为空";
            reply->deleteLater();
            return;
        }
        QJsonObject dItem = dArr.first().toObject();
        QJsonArray tArr = dItem.value("_t").toArray();
        if (tArr.isEmpty()) {
            qDebug() << "返回数据中_t数组为空";
            reply->deleteLater();
            return;
        }
        QJsonObject quoteItem = tArr.first().toObject();
        QJsonValue value = quoteItem.value("_quote_min");
        qDebug() << "Bid value is" << value.toString();

        reply->deleteLater(); // 清理资源
    });
    return a.exec();
}

建议每次解析JSON都增加空值、类型校验,避免因接口返回结构变动导致程序崩溃。

内容的提问来源于stack exchange,提问作者科瓦爾斯基約翰

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:03