嗨,大家好
是的,我知道,有很多复制品,但我还在努力。因此,我的目标是遍历使用外部api获得的JSON列表,并提取所需的值。我需要的值是日期和天气,它们存储在‘avgtempC’中
列表如下所示:
{
"data":
{
"weather":
[
{
"date": "2020-04-13",
"astronomy": [
{
"sunrise": "06:29 AM",
"sunset": "08:22 PM",
"moonrise": "02:24 AM",
"moonset": "09:53 AM",
"moon_phase": "Waning Gibbous",
"moon_illumination": "53"
}
],
"maxtempC": "7",
"maxtempF": "44",
"mintempC": "4",
"mintempF": "40",
"avgtempC": "6",
"avgtempF": "43",
"totalSnow_cm": "0.0",
"sunHour": "11.6",
"uvIndex": "4",
"hourly": [
{
"time": "0",
"tempC": "8",
"tempF": "47",
"windspeedMiles": "19",
"windspeedKmph": "30",
"winddirDegree": "65",
"winddir16Point": "ENE",
"weatherCode": "122"
}]
},
{
"date": "2020-04-14",
"astronomy": [
{
"sunrise": "06:27 AM",
"sunset": "08:24 PM",
"moonrise": "03:24 AM",
"moonset": "10:48 AM",
"moon_phase": "Last Quarter",
"moon_illumination": "46"
}
],
"maxtempC": "11",
"maxtempF": "52",
"mintempC": "3",
"mintempF": "37",
"avgtempC": "7",
"avgtempF": "45",
"totalSnow_cm": "0.0",
"sunHour": "11.6",
"uvIndex": "5",
"hourly": [
{
"time": "0",
"tempC": "4",
"tempF": "39",
"windspeedMiles": "4",
"windspeedKmph": "6",
"winddirDegree": "121",
"winddir16Point": "ESE",
"weatherCode": "116"
}]
}]
}
}当我直接访问这些值时,我得到了正确的输出,如下所示:
let forecast = response['data']['weather'][0];
let output = `${forecast['date']} : ${forecast['avgtempC']}°C`;但我想要的是循环遍历列表,并获得每天的所有日期和温度。我试过这个:
for (let k in forecast) {
if (forecast.hasOwnProperty(k)) {
output += (`[` + forecast[k] + `]` + `,`);
}
}和
for (let k in forecast) {
output += (`[` + forecast[k] + `]` + `,`);
}但我得到的是:
[2020-04-13],[[object Object]],[7],[44],[4],[40],[6],[43],[0.0],[11.6],[4],[object Object]由于某种原因,它只读取第一个日期(2020-04-13)的详细信息,而不是两者都读取。
我也试过了
for (let k in forecast) {
output += (`[` + forecast[k].date + `]` + `,`);
}但它返回未定义的对象。我是否遗漏了什么,或者只是循环不正确,我花了很多时间试图弄清楚这一点,但没有任何运气。我很感谢任何人的帮助,谢谢!
发布于 2020-04-13 21:03:01
您当前正在遍历第一个数组元素(response['data']['weather'][0])的属性。如果您想遍历数组的所有元素,则不应该访问第一个元素([0])。此外,for...in遍历对象属性。您希望使用循环遍历可迭代对象(如数组)的for...of。
const response = {"data":{"weather":[{"date":"2020-04-13","astronomy":[{"sunrise":"06:29 AM","sunset":"08:22 PM","moonrise":"02:24 AM","moonset":"09:53 AM","moon_phase":"Waning Gibbous","moon_illumination":"53"}],"maxtempC":"7","maxtempF":"44","mintempC":"4","mintempF":"40","avgtempC":"6","avgtempF":"43","totalSnow_cm":"0.0","sunHour":"11.6","uvIndex":"4","hourly":[{"time":"0","tempC":"8","tempF":"47","windspeedMiles":"19","windspeedKmph":"30","winddirDegree":"65","winddir16Point":"ENE","weatherCode":"122"}]},{"date":"2020-04-14","astronomy":[{"sunrise":"06:27 AM","sunset":"08:24 PM","moonrise":"03:24 AM","moonset":"10:48 AM","moon_phase":"Last Quarter","moon_illumination":"46"}],"maxtempC":"11","maxtempF":"52","mintempC":"3","mintempF":"37","avgtempC":"7","avgtempF":"45","totalSnow_cm":"0.0","sunHour":"11.6","uvIndex":"5","hourly":[{"time":"0","tempC":"4","tempF":"39","windspeedMiles":"4","windspeedKmph":"6","winddirDegree":"121","winddir16Point":"ESE","weatherCode":"116"}]}]}};
for (const forecast of response.data.weather) {
console.log(`${forecast.date} : ${forecast.avgtempC}°C`);
}
发布于 2020-04-13 21:14:11
非常感谢@3limin4t0r,我也试着自己解决这个问题,它实际上起作用了,起作用的是
for(let i = 0; i < forecast.length; i++){
output += (`[` + forecast[i].date + `]`);
output += (`[` + forecast[i].avgtempC + `]`);
}但在这种情况下,我不得不将预测改为
let forecast = response['data']['weather'];https://stackoverflow.com/questions/61188126
复制相似问题