Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在密钥更改的位置访问JSON对象_Javascript_Reactjs_Alpha Vantage - Fatal编程技术网

Javascript 如何在密钥更改的位置访问JSON对象

Javascript 如何在密钥更改的位置访问JSON对象,javascript,reactjs,alpha-vantage,Javascript,Reactjs,Alpha Vantage,我的React应用程序很难使用。我正在调用AlphaVantage API来获取RSI数据。我想得到最新的RSI值,如下所示: const cryptos = ['AAPL', 'MSFT'] const arr = [] for (var i = 0; i < cryptos.length; i++) { const cryptoUrl = 'https://www.alphavantage.co/query?function=RSI&

我的React应用程序很难使用。我正在调用AlphaVantage API来获取RSI数据。我想得到最新的RSI值,如下所示:

    const cryptos = ['AAPL', 'MSFT']
    const arr = []
    for (var i = 0; i < cryptos.length; i++) {
      const cryptoUrl =
        'https://www.alphavantage.co/query?function=RSI&symbol=' +
        cryptos[i] +
        `&interval=weekly&time_period=10&series_type=open&apikey=${apikey}`
      arr.push(axios.get(cryptoUrl))
    }

    Promise.all(arr)
      .then(response =>
        response.map(res =>
          console.log(
            res.data['Technical Analysis: RSI']['2019-08-30'][' RSI'],
            res.data['Meta Data']['1: Symbol']
          )
        )
      )
      .catch(err => console.log(err))
  }
我正在尝试访问最新的RSI值,但是,最新的值上有一个时间,它总是在变化。我不知道怎么弄到它

JSON如下所示:

请注意,在屏幕截图的第15行,键的“格式”发生了变化,包括日期和时间


谢谢,如果您需要更多信息,请告诉我。

由于密钥已订购,您可以使用Object.keysyourJSON.reduce访问它们并查找最新的值


提取该值并返回它。这应该允许您访问最新的值。

由于键是有序的,您可以使用Object.keysyourJSON.reduce访问它们并查找最新的值


提取该值并返回它。这应该可以让您访问最新的值。

这确实是一个糟糕的API混合格式设计

幸运的是,这两种格式都可以通过简单地将其作为参数传递给新的日期来解析

转换为日期对象后,您可以简单地使用符号来比较它们,以确定哪一个是最新的

要获取最新值,可以使用Object.keys查看所有值,比较它们,然后选择最新值。在下面的示例中,我使用reduce查找最新的

常数数据={ “技术分析:RSI”:{ '2019-08-01 16:00:00': { a:1 }, '2019-09-01': { b:1 }, '2019-08-15': { c:1 } } }; const=Object.keysdata['Technical Analysis:RSI'] .reducenewest,time=>new Datetime>new datenewst?时间:最新'1980-01-01';/'1980-01-01'只是一个旧的默认值。
console.loglatest,数据['技术分析:RSI'][最新] 老实说,混合格式的API设计很糟糕

幸运的是,这两种格式都可以通过简单地将其作为参数传递给新的日期来解析

转换为日期对象后,您可以简单地使用符号来比较它们,以确定哪一个是最新的

要获取最新值,可以使用Object.keys查看所有值,比较它们,然后选择最新值。在下面的示例中,我使用reduce查找最新的

常数数据={ “技术分析:RSI”:{ '2019-08-01 16:00:00': { a:1 }, '2019-09-01': { b:1 }, '2019-08-15': { c:1 } } }; const=Object.keysdata['Technical Analysis:RSI'] .reducenewest,time=>new Datetime>new datenewst?时间:最新'1980-01-01';/'1980-01-01'只是一个旧的默认值。
console.loglatest,数据['技术分析:RSI'][最新] 如果最新的值附加了一个时间,如中所示,它同时包含日期和时间,而其他值则不包含,那么您可以始终通过正则表达式获取附加到对象的带有时间戳的值

例如:

let data;
for(let key in res.data['Technical Analysis: RSI']) {
  if(key.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)
    data = res.data['Technical Analysis: RSI'][key]['RSI'];
    break;
}

或者,您可以匹配:字符,因为它似乎只在有时间时出现。

如果最新值附加了时间,如中所示,则它同时包含日期和时间,而其他值则不包含,您可以始终通过正则表达式获取附加到对象的带有时间戳的值

例如:

let data;
for(let key in res.data['Technical Analysis: RSI']) {
  if(key.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)
    data = res.data['Technical Analysis: RSI'][key]['RSI'];
    break;
}
或者,您可以匹配:字符,因为它似乎只在有时间时出现。

您还可以将API返回的上次刷新属性作为“日期”属性传递。。通过这种方式,您可以始终获得最新的更新,而不必处理索引或将内容转换为日期对象

你需要提供你的API密钥,但我把它放在一起,它就可以工作了。。实际上,它看起来像是使用'123'作为API键=/

您还可以将API返回的上次刷新属性作为“日期”属性传递。。通过这种方式,您可以始终获得最新的更新,而不必处理索引或将内容转换为日期对象

你需要提供你的API密钥,但我把它放在一起,它就可以工作了。。实际上,它看起来像是使用'123'作为API键=/


正如@narendrajadv所提到的,请注意您的代码有一个空格['RSI'],而JSON中的值没有。这可能是它无法在该行工作的原因吗?console.logObject.EntrieRes.data['Technical Analysis:RSI'].map[key,value]=>value尝试与后端团队沟通,以更易读、更方便的方式发送,或者您应该采取一些变通措施来完成,必须编写不必要的代码。@narendrajadv提到,您的代码有一个空格['RSI'],而JSON中的值没有。这可能是它无法在该行工作的原因吗?console.logObject.EntrieRes.data['Technical Analysis:RSI'].map[key,value]=>value尝试与后端团队沟通,以更易读和方便的方式发送,或者您应该做一些变通来完成它,是吗
o编写不必要的代码。假设密钥是在没有API明确声明的情况下订购的,这种情况实际上非常危险。除非您有这样的保证,否则最好实际评估日期。这就是我使用reduce查找最新值的意思:但您的回答详细说明了这一点。假设在订购密钥时API没有明确说明这一点,实际上是非常危险的。除非您有这样的保证,否则最好实际评估日期。这就是我使用reduce查找最新值的意思:但您的回答详细说明了这一点。非常感谢Matt,非常感谢您的帮助!非常感谢马特,非常感谢你的帮助!谢谢你的解决方案!我也会试试的。谢谢你的解决方案!我也要试一试。
let data;
for(let key in res.data['Technical Analysis: RSI']) {
  if(key.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)
    data = res.data['Technical Analysis: RSI'][key]['RSI'];
    break;
}
let lastRefresh = res.data["Meta Data"]["3: Last Refreshed"];
let stockInfo = {
  symbol: res.data["Meta Data"]["1: Symbol"],
  price: res.data["Technical Analysis: RSI"][lastRefresh]["RSI"]
};