我正在创建一个小部件,以使用每天更新的免费 API 中的 JSON 列表显示某家公司的最新股价。
我需要确定哪个键是最新的,并从该键中获取收盘价。
以下是 API 生成的 JSON 示例:
{
"Meta Data": {
"1. Symbol": "GOOG",
"2. Last Refreshed": "2019-05-20 11:52:41"
},
"Time Series (Daily)": {
"2019-05-20": {
"1. open": "1144.5000",
"2. close": "1140.7700"
},
"2019-05-17": {
"1. open": "1168.4700",
"2. close": "1162.3000"
},
"2019-05-16": {
"1. open": "1164.5100",
"2. close": "1178.9800"
}
}
}
为了减少 API 调用,我将 API 的 JSON 输出保存到服务器上的文件中,并且每天更新一次。
我可以使用以下代码获得收盘价的价值:
$json = 'jsonfile.json';
$json = json_decode($json, true);
echo $json['Time Series (Daily)']['2019-05-20']['2. close'];
但我需要从 JSON 中获取中间键(日期)的值。
我以为我可以做这样的事情,但我猜这里的数字被视为字符串而不是数组位置:
echo $json[1][0][1];
我可以使用循环来忽略键名,从顶部获取第三个键的值,将其存储在一个变量中并使用它来回显收盘价:
$i = 0;
$dateKey = '';
foreach($json as $row) {
foreach($row as $key => $val) {
$i = $i + 1;
$dateKey = $key;
if ($i == 3) {
break;
}
}
}
echo $json['Time Series (Daily)'][$dateKey]['2. close'];
但这只有在最新价格始终处于顶部时才有效。我认为它会是……但我对 JSON 的了解还不够确定。
有一个更好的方法吗?
人到中年有点甜