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

Я использую 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. Я пробовал различные наблюдаемые операторы, но ни один из них не работает. Я знаю, что могу переключиться на обещание ... но я хочу использовать наблюдаемые ... любые идеи были бы очень признательны.


person MichaelE    schedule 30.08.2020    source источник


Ответы (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)
    );
}
person Jay McDoniel    schedule 30.08.2020
comment
Спасибо ..... У меня были проблемы со вторым оператором карты. Я заметил, что вы оставили запятую между первой и второй картой ... небольшая опечатка - person MichaelE; 31.08.2020