在最后一天的大部分时间里,我一直把这个问题放在墙上,所以我把它扔在那里,希望那里的一些善良的灵魂能够为我带来一些启发。
因此,我有一个Angular 7应用程序,该应用程序针对AlphaVantage API发出了GET请求。我有一个接口,可以对来自api的JSON响应进行建模,并且能够使用返回的值。问题是,此JSON响应对象的键基于日期,因此我无法提前知道键将是什么,因为它们会随着时间变化。
我试图通过循环遍历对象,但无济于事。
下面是我的界面外观的一个示例
export interface SMA {
'Meta Data': {
'1: Symbol',
'2: Indicator',
'3: Last Refreshed',
...
};
'Technical Analysis: SMA' : {
'2018-12-27': { 'SMA' },
'2018-12-21': { 'SMA' },
...
};
}
这是来自alpha vantage的JSON响应摘录
{
"Meta Data": {
"1: Symbol": "MSFT",
"2: Indicator": "Simple Moving Average (SMA)",
"3: Last Refreshed": "2018-12-27",
"4: Interval": "weekly",
"5: Time Period": 10,
"6: Series Type": "open",
"7: Time Zone": "US/Eastern"
},
"Technical Analysis: SMA": {
"2018-12-27": {
"SMA": "106.7165"
},
"2018-12-21": {
"SMA": "107.8395"
},
"2018-12-14": {
"SMA": "108.4645"
},
....
这是我当前能够访问值的方式。 sma是SMA的一个观测值,因此我可以访问像这样的值
this.http.get<SMA>(this.uri)
.subscribe( data => {
symbol = data["Meta Data"]["1: Symbol"];
value = data["Technical Analysis: SMA"]["2018-12-27"]["SMA"];
});
因此,我能够直接通过名称直接访问这些值,但是我有没有办法在不事先知道键的情况下按顺序访问这些值?理想情况下,此应用程序将能够与API响应保持最新,并且我无法通过命名参数的直接访问来做到这一点。抱歉,如果这是一个完整的菜鸟问题,我已经很长时间没有在前端工作了,这是我第一次尝试使用RESTful API。
答案 0 :(得分:1)
如果您事先不知道键名,则可以使用Index signature来接受任何属性名。
interface Dic {
[key: string]: {
[prop: string]: string
};
}
export interface SMA {
'Meta Data' : {
[prop: string]: string
};
'Technical Analysis: SMA': Dic;
}