当您事先不知道键名时在Angular 7中使用REST JSON对象

时间:2018-12-28 14:50:15

标签: angular rest angular7

在最后一天的大部分时间里,我一直把这个问题放在墙上,所以我把它扔在那里,希望那里的一些善良的灵魂能够为我带来一些启发。

因此,我有一个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。

1 个答案:

答案 0 :(得分:1)

如果您事先不知道键名,则可以使用Index signature来接受任何属性名。

interface Dic {
  [key: string]: {
    [prop: string]: string
  };
}

export interface SMA {
    'Meta Data' : {
        [prop: string]: string
    };
    'Technical Analysis: SMA': Dic;
}