Использование объектов REST JSON в Angular 7, если вы заранее не знаете имен ключей - PullRequest
0 голосов
/ 28 декабря 2018

Я бился головой об стену с этой проблемой большую часть прошлого дня, поэтому я бросаю это туда в надежде, что какая-то добрая душа сможет пролить мне свет.

Итак, у меня есть приложение Angular 7, которое отправляет запрос GET на API AlphaVantage.У меня есть интерфейс, который моделирует ответ JSON от API, и я могу использовать возвращаемые значения.Проблема в том, что ключи для этого объекта ответа JSON основаны на датах, поэтому я не могу заранее знать, какими будут ключи, поскольку они будут меняться со временем.

Я пытался перебрать объект с помощью цикла безрезультатно.

Ниже приведен пример того, как выглядит мой интерфейс

 export interface SMA {
    'Meta Data': {
        '1: Symbol',
        '2: Indicator',
        '3: Last Refreshed',
        ...
    };
    'Technical Analysis: SMA' : {
        '2018-12-27': { 'SMA' },
        '2018-12-21': { 'SMA' },
        ...
    };
}

А вот выдержка из ответа JSON от alpha vantage

{
    "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.

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы заранее не знаете имен ключей, вы можете использовать Индексную подпись , чтобы принять любое имя свойства.

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

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