如何访问含空格的JSON对象?批量遍历时间序列数据求可行方法
解决方案:将关联数组转为索引数组实现按索引访问与遍历
没问题,我来帮你搞定这个问题!你遇到的核心问题是Alpha Vantage返回的Time Series (Daily)是一个关联数组(键是日期字符串),而非数字索引的数组,所以没法直接用[4]这种方式访问。不过我们可以通过简单的数组转换来解决这个问题,同时也能轻松实现遍历。
步骤1:获取并解析JSON数据
先保留你原来的代码,正常获取并解析API返回的JSON:
$string = file_get_contents("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo"); $json_b = json_decode($string, true);
步骤2:将关联数组转为索引数组
使用array_values()函数,把Time Series (Daily)下的关联数组转换成数字索引的数组:
// 把日期为键的关联数组转为数字索引数组 $dailyTimeSeries = array_values($json_b['Time Series (Daily)']);
步骤3:按索引访问指定元素
现在你就可以像你期望的那样,用数字索引访问任意位置的元素了。比如访问第5个元素(注意PHP数组索引从0开始,所以第5个对应索引4)的收盘价:
// 输出第5条数据的收盘价 echo $dailyTimeSeries[4]['4. close'];
步骤4:遍历数月的数据
如果需要遍历一段时间的数据,比如前60天的收盘价,你可以用for循环或者foreach:
方法1:for循环遍历指定数量的数据
// 遍历前60条数据(如果数据不足60条则遍历全部) $totalDays = min(60, count($dailyTimeSeries)); for ($i = 0; $i < $totalDays; $i++) { // 如果需要获取对应的日期,可以用array_keys拿到日期数组 $date = array_keys($json_b['Time Series (Daily)'])[$i]; $closePrice = $dailyTimeSeries[$i]['4. close']; echo "日期:{$date},收盘价:{$closePrice}<br>"; }
方法2:foreach遍历所有数据
// 遍历全部每日数据 foreach ($dailyTimeSeries as $index => $dayData) { $date = array_keys($json_b['Time Series (Daily)'])[$index]; echo "第".($index + 1)."条 - 日期:{$date},收盘价:{$dayData['4. close']}<br>"; }
注意事项
Alpha Vantage返回的日期是从新到旧排序的,也就是说$dailyTimeSeries[0]是最新的交易日数据,索引越大对应的日期越旧,这点在遍历时要留意哦。
内容的提问来源于stack exchange,提问作者EGP
相关产品推荐
相关产品推荐

