Javascript API响应未定义

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=

当我试图访问数据的第0个索引时,我得到了未定义的错误,但当我试图打印出整个对象时,它工作正常。我无法访问数据上的任何元素或循环。数据变量工作正常,但tSeries变量未定义

这是代码片段:

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的问题是键是动态的,事先不知道