Javascript API响应未定义
当我试图访问数据的第0个索引时,我得到了未定义的错误,但当我试图打印出整个对象时,它工作正常。我无法访问数据上的任何元素或循环。数据变量工作正常,但tSeries变量未定义 这是代码片段:Javascript API响应未定义,javascript,json,api,fetch,Javascript,Json,Api,Fetch,当我试图访问数据的第0个索引时,我得到了未定义的错误,但当我试图打印出整个对象时,它工作正常。我无法访问数据上的任何元素或循环。数据变量工作正常,但tSeries变量未定义 这是代码片段: var data; var tSeries; (async () => { const response = await fetch("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=
var data;
var tSeries;
(async () => {
const response = await fetch("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=" + key);
apidata = await response.json();
data = (apidata["Meta Data"]["2. Symbol"]);
tSeries = (apidata["Time Series (Daily)"][0]);
console.log(tSeries);
})();
{
"Meta Data": {
"1. Information": "Intraday (5min) open, high, low, close prices and volume",
"2. Symbol": "IBM",
"3. Last Refreshed": "2020-06-24 16:00:00",
"4. Interval": "5min",
"5. Output Size": "Compact",
"6. Time Zone": "US/Eastern"
},
"Time Series (Daily)": {
"2020-06-24 16:00:00": {
"1. open": "116.4600",
"2. high": "116.6700",
"3. low": "116.3800",
"4. close": "116.4900",
"5. volume": "263785"
},
"2020-06-24 15:55:00": {
"1. open": "116.8000",
"2. high": "116.8600",
"3. low": "116.3500",
"4. close": "116.4700",
"5. volume": "154646"
},
"2020-06-24 15:50:00": {
"1. open": "117.0100",
"2. high": "117.1400",
"3. low": "116.8500",
"4. close": "116.8500",
"5. volume": "99465"
},
"2020-06-24 15:45:00": {
"1. open": "116.6900",
"2. high": "117.0400",
"3. low": "116.6600",
"4. close": "117.0100",
"5. volume": "83736"
}
以下是JSON响应片段:
var data;
var tSeries;
(async () => {
const response = await fetch("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=" + key);
apidata = await response.json();
data = (apidata["Meta Data"]["2. Symbol"]);
tSeries = (apidata["Time Series (Daily)"][0]);
console.log(tSeries);
})();
{
"Meta Data": {
"1. Information": "Intraday (5min) open, high, low, close prices and volume",
"2. Symbol": "IBM",
"3. Last Refreshed": "2020-06-24 16:00:00",
"4. Interval": "5min",
"5. Output Size": "Compact",
"6. Time Zone": "US/Eastern"
},
"Time Series (Daily)": {
"2020-06-24 16:00:00": {
"1. open": "116.4600",
"2. high": "116.6700",
"3. low": "116.3800",
"4. close": "116.4900",
"5. volume": "263785"
},
"2020-06-24 15:55:00": {
"1. open": "116.8000",
"2. high": "116.8600",
"3. low": "116.3500",
"4. close": "116.4700",
"5. volume": "154646"
},
"2020-06-24 15:50:00": {
"1. open": "117.0100",
"2. high": "117.1400",
"3. low": "116.8500",
"4. close": "116.8500",
"5. volume": "99465"
},
"2020-06-24 15:45:00": {
"1. open": "116.6900",
"2. high": "117.0400",
"3. low": "116.6600",
"4. close": "117.0100",
"5. volume": "83736"
}
apidata[“时间序列(每日)”][“2020-06-24 16:00:00”]
应该有用
或者您可以将这些日常对象放在阵列上,然后选择第一个。它不会这样工作 您可以执行apidata[“时间序列(每日)”[“2020-02-03”]
要获取日期的特定对象,或者可以使用
map/reduce/filter
,以获得所需的结果
Object.values(apidata[“时间序列(每日)”).map((值,索引)=>console.log(值));
或钥匙:
Object.keys(apidata[“Time Series(Daily)”).map((key,index)=>console.log(key));
但是,您可以使用从中获得的值执行任何操作。
时间序列(每日)
似乎是一个没有任何纯数字键的对象。最近一次通过索引访问对象是在二十年前。如果键是动态的,则循环访问它们:const daily=apidata[“时间序列(每日)”;对于(const key in daily){console.log(key,daily[key])}
如果您想要第一个键,那么Object.keys(daily)[0]
,第一个条目:Object.entries(daily)[0]
您能解释一下为什么它不起作用吗?map/reduce filter
可以在阵列上使用吗?您在谈论什么?您可以始终使用Object.keys(apidata.map)((key,index)=>//执行任何操作)
。同样的事情也适用于Object.values(apidata).reduce((t,n)=>//做任何事)
我认为OP的问题是键是动态的,事先不知道