В AlphaVantage API есть пробелы и точки в ключах. Для API нет официальной документации, хотя вы можете увидеть ее в их демонстрационном URL-адресе.
В моем приложении Typescript я создал для этого структуры данных (я рад, что кто-нибудь скопирует и использует их - возможно, после того, как будет найдено решение моего вопроса):
export class MetaData {
'1. Information': string
'2. Symbol': string
'3. Last Refreshed': string
'4. Output Size': string
'5. Time Zone': string
constructor(one, two, three, four, five) {
this['1. Information'] = one
this['2. Symbol'] = two
this['3. Last Refreshed'] = three
this['4. Output Size'] = four
this['5. Time Zone'] = five
}
}
export interface TimeSeries {
[date: string]: {
'1. open': string;
'2. high': string;
'3. low': string;
'4. close': string;
'5. volume': string;
}
}
export interface AlphaVantage {
'Meta Data': MetaData;
'Time Series (Daily)'?: TimeSeries;
'Time Series (Weekly)'?: TimeSeries;
}
Я вызываю API, используя alphavantage
из NPM, и неявно передаю его своему AlphaVantage
:
const av: AlphaVantage = await alpha.data.weekly(options.stocks, 'compact', 'json')
И затем (возможно, после некоторого массажа и т. Д.) Я сохраняю его в коллекции MongoDB:
const doc = await this.model.findByIdAndUpdate(proxyModel._id, proxyModel)
(ProxyModel - это DTO, используемый для определения ключей базы данных, таких как дата, символ акций и т. Д. ... Одно из полей - данные AlphaVantage).
Это должно сериализовать данные и ошибки:
key 1. Information must not contain '.'
Есть простой способ справиться с этим. Я бы предпочел создать эквивалентные объекты без пробелов:
export interface TimeSeries {
[date: string]: {
'1_open': string;
'2_high': string;
'3_low': string;
'4_close': string;
'5_volume': string;
}
}
А затем бросить на это. В этом случае предоставьте отображение ...
Я вижу, как я создаю реализацию. Однако прежде чем я перейду к этому, я хотел бы услышать какие-либо идеи, как лучше всего обрабатывать эту структуру данных.