Swift JSON序列化错误

时间:2016-04-05 14:25:14

标签: php json swift

我是Swift和JSON的新手,遇到了麻烦。我在这里查看了各种Q& A's并试图纳入建议,但未能正确完成。

根据JSON lint检查器(http://jsonlint.com),我有生成JSON的服务器。

使用浏览器,响应如下:

[{“PostalCode”:“NW4 2JL”},{“PostalCode”:“NW4 2ES”},{“PostalCode”:“NW4 3XP”},{“PostalCode”:“NW4 4DU”},{“ PostalCode“:”NW4 2HH“},{”PostalCode“:”NW4 2DR“},{”PostalCode“:”NW4 2DX“}]

然而, Xcode给了我这个错误:

错误,抱歉,无法解析JSON:可选([{“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)'")
        }
    }

1 个答案:

答案 0 :(得分:0)

这一行:

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

您正在制作success 可选。由于选项符合协议CustomStringConvertible,你得到"可选(...)" as a string

如果您还不知道什么是可选项,停止所有内容并了解它。现在。 ;)

完成?好的,现在可以安全地打开可选项,例如,可选的绑定:

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
    if let success = json["success"] as? Int {
        print("Success: \(success)")
    }
}

那就是它。

请注意,我们在这里访问词典,但在您的问题中,JSON是词典的数组:它有点不清楚你是什么实际上有。