如何使用 ObjectMapper 从字典访问嵌套键?

How to access nested key from dictionary using ObjectMapper?

需要访问 latlng。我该怎么做?

这就是我现在所做的,但它不起作用:

latitude <- map["location"]["lat"]
longitude <- map["location"]["lng"]

您需要为包含 latlng 属性的位置声明一个单独的 class:

class Location: Mappable {
    var lat: Double?
    var lng: Double?

    required init?(map: Map){ }

    func mapping(map: Map) {
        lat <- map["lat"]
        lng <- map["lng"]
    }
}

因此您可以将其用作:

class Base: Mappable {
    var location: Location?
    // ...

    required init?(map: Map){ }

    func mapping(map: Map) {
        location <- map["location"]
        //...
    }
}

它将表示用于映射基础对象的嵌套类型。


旁注: 您可能还想查看 Codable - Encoding and Decoding Custom Types.

您只需要:

latitude <- map["location.lat"]
longitude <- map["location.lng"]

到目前为止 ObjectMapper 支持键内的点符号,以便轻松映射嵌套对象(您可以在库文档中的 "Easy Mapping of Nested Objects" 下找到它)。

您可以使用 JSONDecoder 而不是使用 ObjectMapper ,这样您就可以只在 json 中写入对象的键,而不是使用 ObjectMapper 将它们写入两次。 (作为 属性 和内部映射函数),特别是如果服务器键命名适合您

希望对你有帮助

 let data = NSData(contentsOf: searchUrl as URL)
                let json = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:AnyObject]
                let status = json["status"] as! String
                print(status)
                if status == "OK" {
                    if let result = json["results"] as? [[String:AnyObject]] {
                        if let geometry = result[0]["geometry"] as? [String:AnyObject] {
                            if let location = geometry["location"] as? [String:AnyObject] {
                                lat = location["lat"] as! Double
                                lng = location["lng"] as! Double
                                print(lat)
                                print(lng)
                            }
                      }
                 }