我对Swift和JSON还不熟悉,现在遇到了麻烦。我看过这里的各种问答,并试图采纳这些建议,但都没有做到正确。
我有一个服务器生成JSON,根据JSON lint检查器(http://jsonlint.com)可以。
使用浏览器,响应如下:
[{“PostalCode”:“NW4 2JL”},{“PostalCode”:“NW4 2ES”},{“PostalCode”:“NW4 3XP”},{“PostalCode”:“NW4 4DU”},{“PostalCode”:“NW4 2HH”},{“PostalCode”:“NW4 2DR”},{“PostalCode”:“NW4 2DX”}]
但是,Xcode给了我这个错误:
错误,抱歉,无法分析JSON:Optional([{“PostalCode”:“NW4 2JL”},{“PostalCode”:“NW4 2ES”},{“PostalCode”:“NW4 3XP”},{“PostalCode”:“NW4 4DU”},{“PostalCode”:“NW4 2HH”},{“PostalCode”:“NW4 2DR”},{“PostalCode”:“NW4 2DX”})
令我困惑的是,我找不到任何解释,“Optional()”部分。在此之前,错误声明是我在第12行写的(唯一包含“对不起”一词的消息)。“()”中的JSON看起来不错。
有人能告诉我我做错了什么吗,或者至少告诉我“Optional()”文本是从哪里来的吗?
这是我的代码的相关部分:

   let task = session.dataTaskWithRequest(request) { data, response, error in
        guard data != nil else {
            print("no data found: \(error)")
            return
        }
        do {
            if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? NSDictionary {
                let success = json["success"] as? Int
                print("Success: \(success)")
            } else {
                let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
                print("Error, sorry, could not parse JSON: \(jsonStr)")
            }
        } catch let parseError {
            print(parseError)
            let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("Error could not parse JSON: '\(jsonStr)'")
        }
    }

最佳答案

用这句话:

let success = json["success"] as? Int

你让success成为一个可选项。由于optionals符合协议CustomStringConvertible,因此可以将“Optional(…)”作为字符串。
如果你还不知道什么是可选的,停止一切,去了解它。现在。;)
完成?好的,现在安全地打开可选的,例如,可选绑定:
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
    if let success = json["success"] as? Int {
        print("Success: \(success)")
    }
}

就这样。
注意,这里我们访问的是一个字典,但是在您的问题中,JSON是一个字典数组:它有点不清楚您实际拥有什么。

09-05 12:13