VB.Net读取OpenWeatherMap API的JSON数据时无法获取description与icon字段的问题
解决OpenWeatherMap JSON中weather数组字段提取问题
嘿,我一眼就看出问题所在啦——你没法提取weather数组里的description和icon,是因为**weather是一个JSON数组(用[]包裹)**,而你当前的代码直接把它当成普通JSON对象来访问了,自然拿不到数据。
问题分析
看你提供的API响应,weather是一个包含单个对象的数组:
weather: [ {id: 802, main: "Clouds", description: "scattered clouds", icon: "03d"} ]
要访问数组里的元素,你需要指定索引(这里是0,因为数组从0开始计数),再去读取对应的字段。
修复后的代码
把你Try块里的两行代码替换成下面的写法:
' 访问weather数组的第一个元素,再提取description和icon description = obj.SelectToken("weather[0]").SelectToken("description") iconid = obj.SelectToken("weather[0]").SelectToken("icon")
另外,我还发现一个小拼写错误:你定义的变量是windspeedMPS,但代码里写的是windspeddMPS(多了一个d),这个也得修正,不然风速字段也会读取失败:
windspeedMPS = obj.SelectToken("wind").SelectToken("speed")
可选写法(更直观的数组访问)
你也可以用JObject的索引器语法来访问,效果是一样的:
description = obj("weather")(0)("description").ToString() iconid = obj("weather")(0)("icon").ToString()
这种写法更明确地体现了“数组→元素→字段”的层级关系。
这样修改后,你就能成功提取到天气描述和图标ID啦!
内容的提问来源于stack exchange,提问作者Peymanrad
相关产品推荐
相关产品推荐

