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

Using REST JSON objects in Angular 7 when you don't know the key names in advance

在最后一天的大部分时间里,我一直在为这个问题苦苦挣扎,所以我把它扔在那里,希望那里的一些好心人可以为我。

所以我有一个 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 apis。

如果您事先不知道密钥名称,您可以使用 Index signature 接受任何 属性 名称。

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

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