ESP32 LED矩阵股票行情器:如何循环存储不同股票的JSON数据
问题解决:使用数组存储多支股票的JSON数据
你无法用json[x]这种方式创建动态变量名,C++不支持在运行时生成变量名。正确的做法是用JSONVar数组来存储每支股票的数据,这样就能通过索引x访问对应股票的JSON数据了。
修正后的代码示例
情况1:股票数量固定(比如3支)
如果你的股票数量是固定的,直接声明一个静态数组即可:
// 全局声明数组,存储3支股票的JSON数据 JSONVar stockData[3]; // 假设stockdef是存储股票代码的数组,比如String stockdef[3] = {"AAPL", "GOOGL", "MSFT"}; void apiget(void * parameter) { while(true){ // 使用局部变量x,避免全局变量的潜在问题 for (int x = 0; x < 3; x++) { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = "https://finnhub.io/api/v1/quote?symbol=" + stockdef[x] + "&token=APIKEY"; http.begin(url); int httpCode = http.GET(); if(httpCode > 0) { String payload = http.getString(); // 将解析后的JSON存入数组对应索引位置 stockData[x] = JSON.parse(payload); Serial.println(stockData[x]); } http.end(); // 务必结束HTTP会话 } } delay(10000); } }
情况2:股票数量是变量y
如果股票数量是动态设置的(比如从配置读取),可以使用动态数组:
JSONVar* stockData; int y = 3; // 你的股票数量,可根据实际情况修改 String stockdef[] = {"AAPL", "GOOGL", "MSFT"}; // 股票代码数组 void apiget(void * parameter) { // 初始化动态数组,分配y个JSONVar的空间 stockData = new JSONVar[y]; while(true){ for (int x = 0; x < y; x++) { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = "https://finnhub.io/api/v1/quote?symbol=" + stockdef[x] + "&token=APIKEY"; http.begin(url); int httpCode = http.GET(); if(httpCode > 0) { String payload = http.getString(); stockData[x] = JSON.parse(payload); Serial.println(stockData[x]); } http.end(); } } delay(10000); } }
后续使用数据
之后你可以通过数组索引访问任意股票的JSON数据,比如:
- 第一支股票:
stockData[0] - 转为字符串用于滚动显示:
String(stockData[0]) - 访问JSON中的具体字段(比如当前价格
c):stockData[0]["c"]
内容的提问来源于stack exchange,提问作者LazyMcCrazy
相关产品推荐
相关产品推荐

