как получить вложенные данные API с помощью nestjs httpservice (axios)

#javascript #node.js #axios #nestjs #rxjs-observables

#javascript #node.js #axios #nestjs #rxjs-наблюдаемые

Вопрос:

Я использую nestjs HTTPService.get для извлечения данных из следующего API:

  getVehicleMake(): Observable<AxiosResponse<any>> {
   return  this.httpService.get('https://vpic.nhtsa.dot.gov/api/vehicles/getallmakes?format=json')
                 .pipe(
                       map(response => response.data.Results),
                       map(obj => obj.Make_Name),
                       );
}
  

API возвращает вложенный массив объектов среди других данных. Я безуспешно пытаюсь получить доступ к массиву свойств Make_Name. Я пробовал различные наблюдаемые операторы, но, похоже, ни один из них не работает. Я знаю, что мог бы переключиться на Обещание … но я хочу использовать наблюдаемые …… любые идеи были бы высоко оценены.

Ответ №1:

Если Results это массив, то для создания массива Make_Name свойства вам нужно использовать методы массива для Results свойства. У вас есть два способа сделать это, учитывая вышеизложенное.

Вариант 1: сделать все в одной map функции

 getVehicleMake(): Observable<AxiosResponse<any>> {
  return  this.httpService.get('https://vpic.nhtsa.dot.gov/api/vehicles/getallmakes?format=json')
    .pipe(
      map(response => response.data.Results.map(result => result.Make_Name)
    );
}
  

Вариант 2: используйте две map функции, две отдельные для получения данных и их правильного отображения

 getVehicleMake(): Observable<AxiosResponse<any>> {
  return  this.httpService.get('https://vpic.nhtsa.dot.gov/api/vehicles/getallmakes?format=json')
    .pipe(
      map(response => response.data.Results),
      map((results) => results.map(result => result.Make_Name)
    );
}
  

Комментарии:

1. Спасибо….. У меня возникли проблемы со вторым оператором map. Я заметил, что вы пропустили запятую между первой и второй картой … небольшая опечатка