Swift,ObjectMapper:嵌套数组

时间:2015-10-19 10:22:42

标签: swift

我有来自http://openweathermap.org/的json,它看起来像这样:

{
"coord": {
"lon": 4.85,
"lat": 45.75
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"base": "cmc stations",
"main": {
"temp": 278.988,
"pressure": 985.88,
"humidity": 92,
"temp_min": 278.988,
"temp_max": 278.988,
"sea_level": 1032.68,
"grnd_level": 985.88
},
"wind": {
"speed": 1.8,
"deg": 355
},
"clouds": {
"all": 80
},
"dt": 1445249394,
"sys": {
"message": 0.0037,
"country": "FR",
"sunrise": 1445234548,
"sunset": 1445273273
},
"id": 2996944,
"name": "Lyon",
"cod": 200
}

我正在使用Alamofire 3.0进行网络连接,使用ObjectMapper将json映射到模型,使用AlamofireObjectMapper扩展来从请求而不是json获取模型对象。 现在我需要得到天气描述,但不知道如何为它写路径。尝试[“weather.0.description”],[“天气。$ 0.description”],但这些都不起作用,我的天气描述为零。

这是我的模特:

class WCurrentWeather: Mappable {
    var weatherDescription: String?
    var tempriture: Double?
    var clouds: Double?
    var rain: Double?
    var humidity: Double?
    var pressure: Double?
    var sunrise: NSDate?
    var sunset: NSDate?

    required init?(_ map: Map){

    }

    func mapping(map: Map) {
        weatherDescription <- map["weather.0.description"]
        tempriture <- map["main.temp"]
        clouds <- map["clouds.all"]
        rain <- map["rain.1h"]
        humidity <- map["main.humidity"]
        pressure <- map["main.pressure"]
        sunrise <- (map["sys.sunrise"], DateTransform())
        sunset <- (map["sys.sunset"], DateTransform())
    }

}

和我的要求:

Alamofire.request(.GET, URL, parameters: params)
            .responseObject { (response: WCurrentWeather?, error: ErrorType?) in
                completionHandler(response, error)
        }

有没有办法让这个工作。 提前致谢。

2 个答案:

答案 0 :(得分:1)

我已经分叉了ObjectMapper,并添加了这个功能,感谢Tristan Himmelman它已经合并了,所以现在你可以访问嵌套数组元素,比如这个map [“weather.0.description”]

答案 1 :(得分:0)

您正在寻找的是:

let jsonDict = // You dict

jsonDict["weather"][0]["description"]

我只是给你一个方向。您需要将其与Swift类型转换规则对齐。祝你好运!