Próbuję uzyskać dostęp do parametru "Lista" w następujących zestawach danych odebranych z [Otwórz mapę pogodową] [1]. Zasadniczo musi uzyskać dostęp do warstwy listy w poniższym zestawie, w którym mogę uzyskać parametr TEMP.

{  
"cod":"200",
"message":0.0046,
"cnt":37,
"list":[  
  {  
     "dt":1518080400,
     "main":{  
        "temp":297.81,
        "temp_min":295.457,
        "temp_max":297.81,
        "pressure":1011.64,
        "sea_level":1018.79,
        "grnd_level":1011.64,
        "humidity":71,
        "temp_kf":2.35
     },
     "weather":[  
        {  
           "id":800,
           "main":"Clear",
           "description":"clear sky",
           "icon":"01d"
        }
     ],
     "clouds":{  
        "all":0
     },
     "wind":{  
        "speed":3.76,
        "deg":322.502
     },
     "sys":{  
        "pod":"d"
     },
     "dt_txt":"2018-02-08 09:00:00"
  },
  {  
     "dt":1518091200,
     "main":{  
        "temp":298.03,
        "temp_min":296.468,
        "temp_max":298.03,
        "pressure":1010.47,
        "sea_level":1017.64,
        "grnd_level":1010.47,
        "humidity":65,
        "temp_kf":1.57
     },
     "weather":[  
        {  
           "id":802,
           "main":"Clouds",
           "description":"scattered clouds",
           "icon":"03d"
        }
     ],
     "clouds":{  
        "all":48
     },
     "wind":{  
        "speed":4.77,
        "deg":315
     },
     "sys":{  
        "pod":"d"
     },
     "dt_txt":"2018-02-08 12:00:00"
  },
  {  
     "dt":1518102000,
     "main":{  
        "temp":294.89,
        "temp_min":294.104,
        "temp_max":294.89,
        "pressure":1011.17,
        "sea_level":1018.11,
        "grnd_level":1011.17,
        "humidity":77,
        "temp_kf":0.78
     },
     "weather":[  
        {  
           "id":802,
           "main":"Clouds",
           "description":"scattered clouds",
           "icon":"03d"
        }
     ],
     "clouds":{  
        "all":44
     },
     "wind":{  
        "speed":4.91,
        "deg":287.002
     },
     "sys":{  
        "pod":"d"
     },
     "dt_txt":"2018-02-08 15:00:00"
  }
]}

Nie jestem pewien, jak o to pójść. Ciągle otrzymuję błąd błędu "Błąd błędu: nie można znaleźć innego obiektu podtrzymującego"

Próbowałem zapętlić się przez to jak poniżej

this.http.get('http://api.openweathermap.org/data/2.5/forecast?id=3362024&APPID=bbcf57969e78d1300a815765b7d587f0').subscribe(data => {
    this.items = JSON.stringify(data);
    console.log(this.items);
    for(var i = 0; i < this.items.length; i++){
      this.min = this.items[i].dt;
      console.log(this.min);
    }
  });
4
skydev 8 luty 2018, 09:54

4 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego. Upewnij się, że importujesz po imporcie na górze komponentu

import 'rxjs/Rx';

Lub

import 'rxjs/add/operator/map'

     getData(){
        this.http.get('https://api.openweathermap.org/data/2.5/forecast?id=3362024&APPID=bbcf57969e78d1300a815765b7d587f0')
.map(res=>res.json()).subscribe(data => {
        this.items = data;
        console.log(this.items);
        for(var i = 0; i < this.items.list.length; i++){
          this.min = this.items.list[i].main;
          console.log(this.min);
        }
      });
      }

Demo robocze .

2
santosh singh 8 luty 2018, 07:48

Do konsoli.log (dane); i sprawdź, jakie dane dostajesz się z API.

Jeśli otrzymujesz dane JSON z API, a następnie nie do json.stringify (dane);

Jeśli dostajesz JSON zawarty w ciągu, a następnie JSON.PARSE ();

Po tym dostaniesz JSON w zmiennej, a możesz go zmierzyć w następujący sposób

Również nie opublikuj swojego klawisza API , inne, inne mogą trafić API za pomocą klucza API

this.http.get('http://api.openweathermap.org/data/2.5/forecast?id=yourId&APPID=yourapikey')
             .subscribe(data => {

             var res = JSON.parse(data); //if you are getting JSON in a string, else do res = data;

             for(var i = 0; i < res.list.length; i++){
                console.log(res.list[i].main.temp);
             }
         });
2
AjinkyaBhagwat 8 luty 2018, 08:47

Biorąc pod uwagę, że jesteś poprawnie dostarczenie odpowiedzi JSON: => jeden sposób: Jeśli znasz odpowiedź z góry, a jego podstawowa struktura jest zawsze taka sama: Możesz utworzyć obiekt modelowy podobny do odpowiedzi JSON i przypisać odpowiedzi JSON na ten obiekt i dostęp wszelkie wartości.

Na przykład

    export class TopLayer{
      fieldName1: dataType;
      fieldName2: Array<SecondLayer>;
    }
    export class SecondLayer{
      fieldName1: datatype;
      fieldName2: ThirdLayer;
    }
export class ThirdLayer{
   fieldName: datatype
}

Inny jest: Przypisz swoją odpowiedź JSON na zmienną Var, a następnie uzyskaj dostęp do tego, czego potrzebujesz: np.

    var x = response;
         var list = x.list;
1
Nabin Kumar Khatiwada 8 luty 2018, 08:30

Możemy również zrobić:

this.http.get("some-api-url")
    .subscribe((response)=>{
      for (let key in response) {
        if (response.hasOwnProperty(key)) {
          let element = response[key];
          let singleData = {id: element.id, value: element.value};
          this.dataArray.push(singleData);
        }
      }

    },
    (error)=>{
      console.log(error)
    });

Gdy odpowiedź jest jak [{}, {}, ...]

0
Rakibul Haq 13 maj 2020, 07:29