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,提问作者科瓦爾斯基約翰
相关产品推荐
相关产品推荐

