2016-10-05 40 views
2

我正在提出一个简单的请求来从JSON文件中获取特定的数据,但我在获取确切数据时遇到问题。使用Alamofire获取数组的关键值

的JSON文件:

{ 
    "Something1": { 
     "Added": "09-10-2016", 
     "Expires": "09-12-2016", 
     "Reliability": "78%", 
     "Views": "2", 
     "Priority": "High" 
    }, 
    "Something2": { 
     "Added": "09-11-2016", 
     "Expires": "09-13-2016", 
     "Reliability": "98%", 
     "Views": "5", 
     "Priority": "Low" 
    } 
} 

的SWIFT代码:

Alamofire.request("https://example.com/args.json").responseJSON { response in 
      if let JSON = response.result.value as? [String:AnyObject] { 
       print(JSON["Something1"]) 
      } 
     } 

随着print(JSON["Something1"]),它打印家居Something1就像它应该,但是当我尝试做print(JSON["Something1"]["Views"])抛出一个错误例如。我将如何去解决这个问题?

+0

我想你必须把你的JSON [“Something1”]作为[String:AnyObject] – koropok

+0

@koropok这绝对适合我!谢谢! – Matt

+0

不客气! – koropok

回答

3

您的问题与Alamofire无关恐怕更多的是使用Swift处理JSON。在你的情况下,当你进行第一次可选绑定时,你将转换为[String: AnyObject],这是正确的,这意味着你可以下标JSON["Something1"]

但在那之后,当你尝试过JSON["Something1"]["Views"]再次标中的编译器不知道有JSON["Something1"]所以你不能用一个字典,而不是你需要的,因为使用可选的嵌套再次投它一本字典这样的绑定:

if let nestedDictionary1 = JSON["Something1"] as? [String: AnyObject] { 
    // access individual value in dictionary 

    if let views = nestedDictionary1["Views"] as? Int { 
     print(views) 
    } 
} 

您可以在Apple的article中了解有关JSON工作的更多信息。

我希望这对你有所帮助。