当前位置: 首页 > 知识库问答 >
问题:

OpenWeatherMap和Swift 4

尹乐邦
2023-03-14

我正在尝试使用Swift 4中的OpenWeatherMap API构建一个简单的天气应用程序。我可以在简单的情况下解析Json数据,但这一个具有更复杂的结构。

这是API返回的Json文件。

{"coord":{"lon":144.96," lat":-37.81}," weather":[{"id":520," main":"Rain "," description ":"光强度阵雨雨"," icon":"09n"}]," base":"stations "," main":{"temp":288.82," pressure":1019,"湿度":100," temp_min":288.15," temp_max":289.15},"能见度":100

我创建了一些结构来获取Json数据。

struct CurrentLocalWeather: Decodable {
    let base: String
    let clouds: Clouds
    let cod: Int
    let coord: Coord
    let dt: Int
    let id: Int
    let main: Main
    let name: String
    let sys: Sys
    let visibility: Int
    let weather: [Weather]
    let wind: Wind
}
struct Clouds: Decodable {
    let all: Int
}
struct Coord: Decodable {
    let lat: Double
    let lon: Double
}
struct Main: Decodable {
    let humidity: Int
    let pressure: Int
    let temp: Double
    let tempMax: Int
    let tempMin: Int
    private enum CodingKeys: String, CodingKey {
        case humidity, pressure, temp, tempMax = "temp_max", tempMin = "temp_min"
    }
}
struct Sys: Decodable {
    let country: String
    let id: Int
    let message: Double
    let sunrise: UInt64
    let sunset: UInt64
    let type: Int
}
struct Weather: Decodable {
    let description: String
    let icon: String
    let id: Int
    let main: String
}
struct Wind: Decodable {
    let deg: Int
    let speed: Double
}

要使用这些数据,这是我编写的代码:

let url = "https://api.openweathermap.org/data/2.5/weather?q=melbourne&APPID=XXXXXXXXXXXXXXXX"
        let objurl = URL(string: url)

        URLSession.shared.dataTask(with: objurl!) {(data, response, error) in

            do {
                let forecast = try JSONDecoder().decode([CurrentLocalWeather].self, from: data!)
                for weather in forecast {
                    print(weather.name)
                }
            } catch {
                print("Error")
            }

        }.resume()

这将在控制台中打印城市名称。不幸的是,它打印错误。

共有1个答案

杜辰龙
2023-03-14

你需要

let forecast = try JSONDecoder().decode(CurrentLocalWeather.self, from: data!)
print(forcast.name)

因为根是字典,而不是数组

 类似资料:
  • 我得到异常“http://api.openweathermap.org/data/2.5/weather?q=sydney”。有人能帮忙怎么用吗。当我粘贴以下内容时,可以很好地使用web浏览器 我也试过下面的组合,但没有运气

  • 我想从OpenWeatherMap API获取基于经度和纬度的天气信息,但我得到了错误信息 净重::ERR_CONNECTION_REFUSED 项目codepen.io 我正在使用https://geoip-db.com/以获得纬度和经度。URL(天气链接)正确。完全错误: 得到https://api.openweathermap.org/data/2.5/weather?lat=51.1

  • 我试图从值中检索Main和Description,但是它没有显示在UILabel中。所有其他参数显示良好。比如温度,最高和最低温度,风速和风向。我也有天气图标的困难,需要一些指导,如果我的代码是正确的。 这是查询的结果: {“coord”:{“lon”:-114.09,“lat”: 51.05},“天气”:[{“id”: 802,“main”:“Clouds”,“描述”:“散落的云”,“图标”:“

  • 我想得到openweathermap图标。https://openweathermap.org/weather-conditions和http://samples.openweathermap.org/data/2.5/weather?q=London,英国 非常感谢你。你的建议对我很重要

  • 我需要使用他们的API和SAS系统连接到OpenWeatherMap。可以使用以下地址调用APIapi.openweathermap.org/data/2.5/weather?q=London, uk 我已经使用以下方法连接到另一个API: 因此,我认为我可以使用类似的代码,但没有任何运气。API调用的输出由下式给出: {“coord”:{“lon”:-0.13,“lat”:51.51},“wea

  • 所以…我得到了一个调用Api,其中还包括7天的预测。我设法显示了当前的天气(温度和图标),但如何获得未来4天的天气预报? 我的API:https://api.openweathermap.org/data/2.5/onecall?lat=lat 我的型号: 我的回答是: 响应对象: 来自OneCall API的JSON: