Javascript 如何在密钥更改的位置访问JSON对象
我的React应用程序很难使用。我正在调用AlphaVantage API来获取RSI数据。我想得到最新的RSI值,如下所示: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&
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"]
};