Раньше я работал с JSON вот так:

this.http.get('http://localhost:3000/SumOfDipVolume').subscribe(res => {
  for (let dipVolume of res['result']) {
    // some code
});

Но теперь я не хочу попадать в объект result , потому что мой объект JSON не включает объект result . Это мой файл JSON:

[
  {
    "Title": "DYNAMIC DISEL 50PPM",
    "UpValue": "122,196",
    "DownValue": "-148,740.83",
    "Procentage": "45.10%"
  },
  {
    "Title": "DYNAMIC UNLEADED 95",
    "UpValue": "121,905",
    "DownValue": "-285,527.35",
    "Procentage": "29.92%"
  }
]

Теперь я должен использовать такие: for (let dipVolume of res) { но angular говорит мне: Объект типа не является типом массива или строковым типом. Как это повторить?

1
Nemanja Andric 13 Сен 2018 в 19:44

2 ответа

Лучший ответ

Это проблема, решающая type Typescript, она рассматривалась как тип any (но не как массив). Поскольку вы не указали какой-либо тип, вы не можете перебрать объект

Вы можете решить явно указав тип.

.subscribe((res: IMyObjectShape[]) => { // preferred way to add new interface
//.subscribe((res: any[]) => { //<- use any if you're defining any interface
  ... 
})
0
Pankaj Parkar 13 Сен 2018 в 17:08

Проблема в том, что вы получаете весь HTTP-запрос, если вы указываете тип контента, вы получите только ответ с результатом. попробуйте использовать следующий код.

import { HttpClient, HttpHeaders } from '@angular/common/http'; 
...
constructor(private http: HttpClient) { }

serviceApi(){
   let headers = new HttpHeaders();
   headers = headers.set('Content-Type', 'application/json; charset=utf-8');
   return this.http.get('http://localhost:3000/SumOfDipVolume', {headers})
   .subscribe(res => {
       res.forEach(dipVolume =>{
        // some code
       });
   });          
}
0
Abel Valdez 13 Сен 2018 в 16:54