如何使用 ObjectMapper 从字典访问嵌套键?
How to access nested key from dictionary using ObjectMapper?
需要访问 lat
和 lng
。我该怎么做?
这就是我现在所做的,但它不起作用:
latitude <- map["location"]["lat"]
longitude <- map["location"]["lng"]
您需要为包含 lat
和 lng
属性的位置声明一个单独的 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)
}
}
}
需要访问 lat
和 lng
。我该怎么做?
这就是我现在所做的,但它不起作用:
latitude <- map["location"]["lat"]
longitude <- map["location"]["lng"]
您需要为包含 lat
和 lng
属性的位置声明一个单独的 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)
}
}
}