无法通过 JS / XMLHttpRequest 从 OpenWeatherMap API 的输出中获取特定字段

Trouble getting a specific field from OpenWeatherMap API's output, via JS / XMLHttpRequest

所以我正在使用 OpenWeatherMap API 构建这个网络预报应用程序,到目前为止,我能够从列表输出的第一次迭代中获取数据,但是我需要获取数据其他特定领域也是如此。这是我的一些代码:

ajaxGet("https://api.openweathermap.org/data/2.5/onecall?lat=4.6097&lon=-74.0817&exclude=current,minutely,hourly,alerts&appid=APPID&units=metric", function (response) {

      var data = JSON.parse(response);
      console.log(data);
      
      var temperature = document.createElement("h6");
      temperature.textContent = data.daily[0].temp.max + "°" + " / " + data.daily[0].temp.min + "°";

      document.getElementById("temperaturaBogVier").appendChild(temperature);
  });

下面是 API 输出的示例(我在这里只展示了第一次迭代,但总共至少有 6 次,https://api.openweathermap.org/data/2.5/onecall?lat=4.6097&lon=-74.0817&exclude=current,minutely,hourly,alerts&appid=APPID&units=metric):

{"lat":4.61,"lon":-74.08,"timezone":"America/Bogota","timezone_offset":-18000,"daily":
[
    
{"dt":1600876800,
 "sunrise":1600857917,
 "sunset":1600901504,
 "temp":{"day":18.14,"min":8.99,"max":18.14,"night":12.08,"eve":15.45,"morn":8.99},
 "feels_like":{"day":17,"night":11.02,"eve":14.6,"morn":7.58},
 "pressure":1017,"humidity":54,
 "dew_point":8.69,
 "wind_speed":1.2,
 "wind_deg":164,
 "weather":[{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"}],
 "clouds":82,
 "pop":0.94,
 "rain":5.85,
 "uvi":15.14}

]
}

如您所见,我可以将包含在“data.daily[0].temp.”中的数据打印到我的 HTML 中,但它仅适用于第一个一组字段,我不知道如何 select 特定的迭代。我确定我在 concat 中遗漏了一些东西,但到目前为止我尝试过的任何东西都没有用。

任何帮助将不胜感激,并奖励一个想象中的华夫饼。谢谢:D

每天 data.daily 的温度被定义为一个 JavaScript 对象数组。您可以简单地通过索引访问它们,索引指示它们在数组中的位置。

data.daily[0] // First element
data.daily[1] // Second element
data.daily[2] // Third element

一旦您在数组中选择了一个对象,您就可以访问某些值,例如 data.daily[2].temp.max

数组的妙处在于您可以使用循环来迭代它们。如果您想打印出每天的每个温度,这将为您节省大量的写作:

ajaxGet("https://api.openweathermap.org/data/2.5/onecall?lat=4.6097&lon=-74.0817&exclude=current,minutely,hourly,alerts&appid=YOUR_API_KEY_HERE&units=metric", function (response) {

  var data = JSON.parse(response);
  console.log(data);

  data.daily.forEach(function (date) {
    var temperature = document.createElement("h6");
    temperature.textContent = date.temp.max + "°" + " / " + date.temp.min + "°";

    document.getElementById("temperaturaBogVier").appendChild(temperature);
  })
});

请注意:我删除了请求 URL 的 appid=XXXXX 部分,因为它包含您的个人 API 密钥OpenWeather,您不应公开分享。

如果我对这个问题的理解正确,你想把所有的日常 max/min-values 放入你想附加到另一个元素的元素中。

这是一种方法

ajaxGet("https://api.openweathermap.org/data/2.5/onecall?lat=4.6097&lon=-74.0817&exclude=current,minutely,hourly,alerts&units=metric", function (response) {
    var data = JSON.parse(response);
    console.log(data);

    data.daily
        .map(datapoint => datapoint.temp) //get the temp value/object from each datapoint
        .map(temp => { //create an element and add each max/min value to that element's textContent
            const temperature = document.createElement("h6");
            temperature.textContent = temp.max + "° / " + temp.min + "°";
            return temperature;
        })
        .forEach(element => { //add each of the elements created in the previous map to the desired element
            document.getElementById("temperaturaBogVier").appendChild(element);
        });
});

正如另一个答案中所指出的,我还删除了 app-id 查询参数