无法使用alamofire深入了解json。迅速

时间:2016-01-06 05:03:53

标签: json api alamofire

好的,我很难深入研究下面代码中检索到的响应json。

快照1:

Snapshot 1

快照2:

Snapshot 2

我将上面的json作为回应,但当我尝试深入json时,我无法访问密钥" Address"或根据预订持有的任何其他钥匙。它找到预订但随后分配我为每个键的值(地址,州,邮政编码和城市)创建的变量,并将这些变量指定为空。我唯一的理论是响应json有"()"在预订之后而不是正常的" {}"。那些大括号确实出现在括号之后,那么如何用一把钥匙钻进去?我仍然是应用程序开发世界的新手,所以我可能完全错了,只是这种请求方法在我过去收到了#34; {}"在第一把钥匙之后。

2 个答案:

答案 0 :(得分:0)

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");
}

FYI请注意,方法valueForKeyPath()会返回字典数组中特定键的值数组。

e.g。假设您有多个预订数组对象,并使用

let arrayAddresses = bookings.valueForKeyPath("address") as! NSArray

这将返回仅包含所有对象地址的字符串数组。

另一点,'()'表示数组值,' {}'表示字典值。

答案 1 :(得分:0)

我建议使用Swift类型(比如[String: AnyObject])而不是基础类型(如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)的原因。如果使用正确的类型,您可以更具体,更简洁。