无法使用 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。迅速的主要内容,如果未能解决你的问题,请参考以下文章

似乎无法使用 Alamofire 获取缓存的响应

api没有使用alamofire显示序列化的json输出

Alamofire 无法访问 json 响应的键

无法解析响应 alamofire swift 3

无法使用 Alamofire 和 SwiftyJSON 访问数组内部的 url,JSON 响应

iOS9 - NSURLSession 无法解析响应但 AlamoFire 工作