我是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“}]
然而,错误,抱歉,无法解析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)'")
}
}
答案 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是词典的数组:它有点不清楚你是什么实际上有。