【问题标题】:having trouble drilling down into response json using alamofire. Swift无法使用 alamofire 深入了解响应 json。迅速
【发布时间】:2016-01-06 05:03:52
【问题描述】:

好的,所以我无法深入了解在以下代码中检索到的响应 json。

快照 1:

快照 2:

我得到了上面的 json 作为响应,但是当我尝试深入了解 json 时,我无法访问键“地址”或预订下的任何其他键。它会找到预订,然后分配我为每个键的值(地址、州、邮政编码和城市)创建的变量,并将这些变量分配为 null。我唯一的理论是响应json在预订后立即具有“()”而不是正常的“{}”。括号后面确实出现了那些括号,那么我如何在没有钥匙的情况下钻进去呢?我对应用程序开发世界还是新手,所以我可能完全错了,过去当我在第一个键后收到“{}”时,这种请求方法对我有用。

【问题讨论】:

  • 不要张贴您的代码图片。将相关代码作为文本复制并粘贴到您的问题中。请务必正确格式化。

标签: json api alamofire


【解决方案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)。如果你使用正确的类型,你可以更具体、更简洁。

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2021-09-17
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2015-01-06
      • 2020-12-02
      • 1970-01-01
      相关资源
      最近更新 更多