首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何遍历JSON列表并检索所需的值

如何遍历JSON列表并检索所需的值
EN

Stack Overflow用户
提问于 2020-04-13 20:41:53
回答 2查看 63关注 0票数 0

嗨,大家好

是的,我知道,有很多复制品,但我还在努力。因此,我的目标是遍历使用外部api获得的JSON列表,并提取所需的值。我需要的值是日期和天气,它们存储在‘avgtempC’中

列表如下所示:

代码语言:javascript
运行
复制
{
"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"
                }]
        }]
}
}

当我直接访问这些值时,我得到了正确的输出,如下所示:

代码语言:javascript
运行
复制
 let forecast = response['data']['weather'][0];
 let output = `${forecast['date']} : ${forecast['avgtempC']}°C`;

但我想要的是循环遍历列表,并获得每天的所有日期和温度。我试过这个:

代码语言:javascript
运行
复制
     for (let k in forecast) {
      if (forecast.hasOwnProperty(k)) {
        output += (`[` + forecast[k] + `]` + `,`);     
      }
    }

代码语言:javascript
运行
复制
    for (let k in forecast) {
        output += (`[` + forecast[k] + `]` + `,`);     
    }

但我得到的是:

代码语言:javascript
运行
复制
[2020-04-13],[[object Object]],[7],[44],[4],[40],[6],[43],[0.0],[11.6],[4],[object Object]

由于某种原因,它只读取第一个日期(2020-04-13)的详细信息,而不是两者都读取。

我也试过了

代码语言:javascript
运行
复制
    for (let k in forecast) {
        output += (`[` + forecast[k].date + `]` + `,`);     
    }

但它返回未定义的对象。我是否遗漏了什么,或者只是循环不正确,我花了很多时间试图弄清楚这一点,但没有任何运气。我很感谢任何人的帮助,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 21:03:01

您当前正在遍历第一个数组元素(response['data']['weather'][0])的属性。如果您想遍历数组的所有元素,则不应该访问第一个元素([0])。此外,for...in遍历对象属性。您希望使用循环遍历可迭代对象(如数组)的for...of

代码语言:javascript
运行
复制
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`);
}

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 21:14:11

非常感谢@3limin4t0r,我也试着自己解决这个问题,它实际上起作用了,起作用的是

代码语言:javascript
运行
复制
    for(let i = 0; i < forecast.length; i++){
        output += (`[` + forecast[i].date + `]`); 
        output += (`[` + forecast[i].avgtempC + `]`);
    }

但在这种情况下,我不得不将预测改为

代码语言:javascript
运行
复制
let forecast = response['data']['weather'];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61188126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档