从Openweathermap API中获得迅捷的天气数据?

openweathermap api我得到了以下的响应。

{
  "cod":"200",
  "message":0,
  "cnt":40,
  "list":[
     {
        "dt":1587643200,
        "main":{
           "temp":289.78,
           "feels_like":283.61,
           "temp_min":289.03,
           "temp_max":289.78,
           "pressure":1014,
           "sea_level":1014,
           "grnd_level":1010,
           "humidity":41,
           "temp_kf":0.75
        },
        "weather":[
           {
              "id":804,
              "main":"Clouds",
              "description":"overcast clouds",
              "icon":"04d"
           }
        ],
        "clouds":{
           "all":94
        },
        "wind":{
           "speed":6.75,
           "deg":2
        },
        "sys":{
           "pod":"d"
        },
        "dt_txt":"2020-04-23 12:00:00"
     },
     {
        "dt":1587654000,
        "main":{
           "temp":289.66,
           "feels_like":284.44,
           "temp_min":289.34,
           "temp_max":289.66,
           "pressure":1013,
           "sea_level":1013,
           "grnd_level":1009,
           "humidity":47,
           "temp_kf":0.32
        },
        "weather":[
           {
              "id":803,
              "main":"Clouds",
              "description":"broken clouds",
              "icon":"04d"
           }
        ],
        "clouds":{
           "all":67
        },
        "wind":{
           "speed":5.9,
           "deg":357
        },
        "sys":{
           "pod":"d"
        },
        "dt_txt":"2020-04-23 15:00:00"
     }

然后我写了下面的代码来获取任何一个特定日间(dt)的风力数据。我得到的是 jsonresponseAny “清单”。但我不能得到风的数据。我得到的是 error

“类型为’Any’的值没有下标”。

另外,我也不明白,如何才能获得风数据的 dt=1587643200dt=1587654000 分别是: { “cod”: “200”, “message”:0, “cnt”:40, “list”:[ { “dt”:1587643200, “main”:{ “temp”:289:289

                           if let list = jsonresponse["list"] as? Any {
                               let wind = list["wind"] as? [String : Any],
                               print(wind)
                           }

解决方案:

这是一个超级简单的例子,这个 疑问 和你的问题类似。我希望你能了解一下 可编码 协议来简化和改进你的代码,因为这种方式是超级诡异的。

let url = URL(string: "https://samples.openweathermap.org/data/2.5/history/city?id=2885679&type=hour&appid=b1b15e88fa797225412429c1c50c122a1")!
URLSession.shared.dataTask(with: url, completionHandler: {(data, response, error) in
    if let error = error {
        print(error.localizedDescription)
        return
    }

    guard let httpResponse = response as? HTTPURLResponse,
        (200...299).contains(httpResponse.statusCode) else {
            print("Error with the response, unexpected status code: \(String(describing: response))")
            return
    }

    guard let data = data else {
        return
    }

    guard let dictionaryObj = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
        return
    }

    guard let list = dictionaryObj["list"] as? [[String: Any]] else {

        return
    }

    if let first = list.first, let wind = first["wind"] {
        print(wind)
    }
}).resume()

给TA打赏
共{{data.count}}人
人已打赏
未分类

物质用户界面在点击ItemList中的单个项目时改变状态。

2022-9-8 1:39:38

未分类

我如何能够检查是否使用了认证途径?

2022-9-8 1:39:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索