Работа со сложным json по HTTP-запросу в проекте Angular (MEAN STACK) - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время я работаю над собственным проектом, и у меня возникают проблемы при обработке «больших» файлов JSON. Я получаю данные из MongoDB онлайн (Mon go Atlas), затем я получаю доступ к этим данным через простой REST API простого узла JavaScript. Учитывая, что сложность JSON велика, я не уверен, что делать дальше. Я обычно создаю модель JSON, чтобы справиться с этим. Но в этом случае я действительно не знаю, как это сделать. Схема такова:

Документация Swagger

Как видите, в ней много вложенных массивов. У меня вопрос, должен ли я использовать классы или, может быть, интерфейсы? Для каждого массива мне нужно создать новый класс?

В настоящее время это модель, с которой я работал: (это работало на JavaScript, но, конечно, не работает в TypeScript, потому что объект на самом деле не определено)

    export class Match{
        constructor(
            public _id: string,
            public game: Object
        ){}
    }

Я знаю, что могу импортировать весь пользовательский интерфейс в свой собственный проект (не знаю, как это сделать, https://www.npmjs.com/package/swagger-ts-generator, это может работать), но мне действительно нужна эта схема.

Любая помощь будет принята.

1 Ответ

1 голос
/ 04 мая 2020

Честно говоря, когда JSON превышает указанную длину c, я действительно не использую модели для ее обработки (сторона Java), фактически я их вообще не использую в Angular. У него есть свои преимущества и недостатки, особенно когда речь идет о контексте машинописного текста, это не совсем рекомендуемая вещь, но она выполняет свою работу.

  public getData(): Observable<any> {
    return this.http.get(environment.apiBaseUrl + "/data/", this.prepareHeader());
  }

Тогда вы на самом деле просто subscribe на Observable и получить доступ к нужным переменным по их ключу, например,

this.dataAcquireService.getData().subscribe(
  (res) => {
    this.data = res;
    for (let i = 0; i < this.data.length; i++) {
      if (!this.selectGroups[this.data[i].name]) this.selectGroups[this.data[i].name] = [];
      this.selectGroups[this.data[i].name].push(this.data[i]);
    }
  },
  (err) => this.dataAcquireService.handleErrorResponse(err)
)

В конце концов, все зависит от вкуса и ожиданий, потому что оба пути ведут к желаемой цели: один может быть сочтен грязным догматиками, другой может считаться слишком утомительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...