使用Alamofire获取数组键值

时间:2016-10-05 03:42:56

标签: json swift swift3 alamofire

我正在提出一个从JSON文件中获取特定数据的简单请求,但是我在获取确切数据方面遇到了问题。

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

快速代码:

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一样打印Something1的所有内容,但是当我尝试print(JSON["Something1"]["Views"])时会抛出错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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)
    }
}

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

我希望这对你有所帮助。