当它位于{}而不是[]时,如何从api中获取内容

时间:2019-04-13 18:01:23

标签: swift openweathermap

我正在尝试为某个项目制作天气应用,并且我将api用于openweathermap。我得到它来输出一些信息,但是我不知道如何获得其余信息。这就是我将其放入邮递员时出现的结果。如何获取{}中的信息,例如温度以及最低和最高温度?我知道如果是数组,我可以遍历它,但是不是。

到目前为止,我试图像数组一样遍历它,但没有用:

if let mainJson = jsonObject["main"] as? [[String:AnyObject]]
{
    for eachtemp in mainJson
    {
        if let temp = eachtemp["temp"] as? String
        {
            print("the temp is: ", temp)
        }
    }
}

这是api的响应:

{
    "coord": {
        "lon": -88.75,
        "lat": 41.93
    },
    "weather": [
        {
            "id": 800,
            "main": "Clear",
            "description": "clear sky",
            "icon": "01d"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 281.24,
        "pressure": 1019,
        "humidity": 52,
        "temp_min": 279.26,
        "temp_max": 283.15
    },
    "visibility": 16093,
    "wind": {
        "speed": 7.7,
        "deg": 280,
        "gust": 11.3
    },
    "clouds": {
        "all": 1
    },
    "dt": 1555176309,
    "sys": {
        "type": 1,
        "id": 5706,
        "message": 0.0073,
        "country": "US",
        "sunrise": 1555154275,
        "sunset": 1555201965
    },
    "id": 420012399,
    "name": "Aurora",
    "cod": 200
}

1 个答案:

答案 0 :(得分:0)

{}是字典(快速类型[String:Any]从不 [String:AnyObject]),您必须通过键订阅来获取每个值,所有请求的值都是{ {1}}

Double

关于强制展开:if let main = jsonObject["main"] as? [String:Any] { let temp = main["temp"] as! Double let tempMin = main["temp_min"] as! Double let tempMax = main["temp_max"] as! Double print(temp, tempMin, tempMax) } 发送非常可靠的数据。如果openweathermap存在,那么里面的键也存在


有了main,变得更容易

Decodable