为什么我得到 QJsonValue(undefined)?
Why do i get QJsonValue(undefined)?
当我向 API 请求获取出价时,我得到的 QJsonValue 未定义,并且稍后无法显示它,我做错了什么?
{
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]() {
QByteArray rawData = reply->readAll();
QString textData(rawData);
qDebug() << textData;
QJsonDocument doc = QJsonDocument::fromJson(textData.toUtf8());
QJsonObject obj = doc.object();
qDebug() << obj;
QJsonValue value = obj.value(QString("_quote_min"));
qDebug() << obj.value(QString("_quote_min"));;
qDebug() << "Bid value is" << value.toString();;
reply->deleteLater(); // make sure to clean up
});
return a.exec();
}
这是我的 json:
QJsonObject({"_count":1,"_d":[{"_h":"Własne - 19 listopada 2021 17:15","_hs":"Własne","_max_quote_dtm":"19 listopada 2021","_max_quote_dtm_lc":"19 listopada, 17:15","_ret_quote_dtm":"2021-11-19","_t":[{"_30d_change_max":2453.57,"_30d_change_min":2221.68,"_ask_orders_nr":null,"_ask_size":null,"_ask_volume":null,"_bid_orders_nr":null,"_bid_size":null,"_bid_volume":null,"_change":"-1.02","_change_close_open":"-1.04","_change_max_min":"+2.91","_change_pnts":-23.13,"_change_proc":-1.02,"_change_settl_ref":null,"_change_suffix":"%","_change_type":"_change_proc","_debut":"0","_group":"X1","_is_indice":"1","_isin":"PL9999999987","_live":"0","_open_positions":null,"_phase":"Zamknięcie ostateczne","_quote":"2248.18","_quote_date":"2021.11.19","_quote_imp":"2276.90","_quote_max":"2286.37","_quote_min":"2221.68","_quote_open":"2271.91","_quote_ref":"2271.31","_quote_time":"17:15","_quote_type":"_quote","_quote_volume":null,"_settlement_price":null,"_step":"2","_sw_symbol_short":0,"_symbol":"WIG20","_symbol_short":"WIG20","_time":"17:15","_transactions_nr":null,"_turnover_value":1257698337,"_type_of_instrument":"0","_volume":null}]}],"_d_fx":{"_h":null,"_hs":null,"_max_quote_dtm":null,"_max_quote_dtm_lc":null,"_t":[]},"_i":[null],"_quote_date":null,"_symbol":["WIG20"],"_type":"C","message":"OK"})
如果您确信 JSON 结构将始终相同,那么您可以像下面这样找到您的值。 (我将其分解为多个对象,并按照它们在 JSON 文件中的命名方式命名它们。)
QJsonDocument doc = QJsonDocument::fromJson(textData.toUtf8());
auto rootObj = doc.object();
auto _d = rootObj.value("_d").toArray();
auto _t = _d[0].toObject().value("_t").toArray();
auto _quote_min = _t[0].toObject().value("_quote_min");
qDebug() << _quote_min;
输出:
QJsonValue(string, "2221.68")
当我向 API 请求获取出价时,我得到的 QJsonValue 未定义,并且稍后无法显示它,我做错了什么?
{
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]() {
QByteArray rawData = reply->readAll();
QString textData(rawData);
qDebug() << textData;
QJsonDocument doc = QJsonDocument::fromJson(textData.toUtf8());
QJsonObject obj = doc.object();
qDebug() << obj;
QJsonValue value = obj.value(QString("_quote_min"));
qDebug() << obj.value(QString("_quote_min"));;
qDebug() << "Bid value is" << value.toString();;
reply->deleteLater(); // make sure to clean up
});
return a.exec();
}
这是我的 json:
QJsonObject({"_count":1,"_d":[{"_h":"Własne - 19 listopada 2021 17:15","_hs":"Własne","_max_quote_dtm":"19 listopada 2021","_max_quote_dtm_lc":"19 listopada, 17:15","_ret_quote_dtm":"2021-11-19","_t":[{"_30d_change_max":2453.57,"_30d_change_min":2221.68,"_ask_orders_nr":null,"_ask_size":null,"_ask_volume":null,"_bid_orders_nr":null,"_bid_size":null,"_bid_volume":null,"_change":"-1.02","_change_close_open":"-1.04","_change_max_min":"+2.91","_change_pnts":-23.13,"_change_proc":-1.02,"_change_settl_ref":null,"_change_suffix":"%","_change_type":"_change_proc","_debut":"0","_group":"X1","_is_indice":"1","_isin":"PL9999999987","_live":"0","_open_positions":null,"_phase":"Zamknięcie ostateczne","_quote":"2248.18","_quote_date":"2021.11.19","_quote_imp":"2276.90","_quote_max":"2286.37","_quote_min":"2221.68","_quote_open":"2271.91","_quote_ref":"2271.31","_quote_time":"17:15","_quote_type":"_quote","_quote_volume":null,"_settlement_price":null,"_step":"2","_sw_symbol_short":0,"_symbol":"WIG20","_symbol_short":"WIG20","_time":"17:15","_transactions_nr":null,"_turnover_value":1257698337,"_type_of_instrument":"0","_volume":null}]}],"_d_fx":{"_h":null,"_hs":null,"_max_quote_dtm":null,"_max_quote_dtm_lc":null,"_t":[]},"_i":[null],"_quote_date":null,"_symbol":["WIG20"],"_type":"C","message":"OK"})
如果您确信 JSON 结构将始终相同,那么您可以像下面这样找到您的值。 (我将其分解为多个对象,并按照它们在 JSON 文件中的命名方式命名它们。)
QJsonDocument doc = QJsonDocument::fromJson(textData.toUtf8());
auto rootObj = doc.object();
auto _d = rootObj.value("_d").toArray();
auto _t = _d[0].toObject().value("_t").toArray();
auto _quote_min = _t[0].toObject().value("_quote_min");
qDebug() << _quote_min;
输出:
QJsonValue(string, "2221.68")