无法使用 alamofire 深入了解响应 json。迅速
Posted
技术标签:
【中文标题】无法使用 alamofire 深入了解响应 json。迅速【英文标题】:having trouble drilling down into response json using alamofire. Swift 【发布时间】:2016-01-06 05:03:52 【问题描述】:好的,所以我无法深入了解在以下代码中检索到的响应 json。
快照 1:
快照 2:
我得到了上面的 json 作为响应,但是当我尝试深入了解 json 时,我无法访问键“地址”或预订下的任何其他键。它会找到预订,然后分配我为每个键的值(地址、州、邮政编码和城市)创建的变量,并将这些变量分配为 null。我唯一的理论是响应json在预订后立即具有“()”而不是正常的“”。括号后面确实出现了那些括号,那么我如何在没有钥匙的情况下钻进去呢?我对应用程序开发世界还是新手,所以我可能完全错了,过去当我在第一个键后收到“”时,这种请求方法对我有用。
【问题讨论】:
不要张贴您的代码图片。将相关代码作为文本复制并粘贴到您的问题中。请务必正确格式化。 【参考方案1】:1) 您正在使用方法valueForKeyPath()
从dictionary
获取价值。
将其更改为valueForKey()
。
2) 关键“预订”的值将为您提供数组。
试试这个代码。
let data = JSON as! NSDictionary;
//value for key "bookings" will give you array
if let bookings = data.valueForKey("bookings") as? NSArray
let bookingObj = bookings[0] as! NSDictionary;
self.address = bookingObj.valueForKey("address");
self.state = bookingObj.valueForKey("state");
self.zip = bookingObj.valueForKey("zip");
self.city = bookingObj.valueForKey("city");
仅供参考,请注意, 方法 valueForKeyPath()
从字典数组中返回特定键的值数组。
例如假设您有多个预订数组对象,并且您使用
let arrayAddresses = bookings.valueForKeyPath("address") as! NSArray
这将返回仅包含所有对象地址的字符串数组。
另外一点,'()'表示数组值,''表示字典值。
【讨论】:
【参考方案2】:我建议使用 Swift 类型(如 [String: AnyObject]
)而不是 Foundation 类型(如 NSDictionary
),最重要的是,您应该在出现故障时打印出来,这样您就知道出了什么问题。所以从你的let data = ...
行开始,试试这个:
if let data = JSON as? [String: AnyObject],
bookings = data["bookings"] as? [[String: AnyObject]],
booking = bookings[0]
self.address = booking["address"] as? String
self.state = booking["state"] as? String
self.zipCode = booking["zip"] as? String
self.city = booking["city"] as? String
print(self.address)
else
print("Couldn't parse booking from JSON")
在this article 中详细了解为什么打字很重要(以及为什么应该使用[[String: AnyObject]]
而不是NSArray
)。如果你使用正确的类型,你可以更具体、更简洁。
【讨论】:
以上是关于无法使用 alamofire 深入了解响应 json。迅速的主要内容,如果未能解决你的问题,请参考以下文章