【发布时间】:2016-04-05 14:25:13
【问题描述】:
我是 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)'")
}
}
【问题讨论】:
-
@Eric D:可选选项也可能是暂时的,我想它们是出于向后兼容的原因,而不是因为它们很聪明
-
@IanBell Optionals 是 Swift 中的一个关键概念,Chris Lattner 已经说过很多次了。他们不会很快去任何地方。 :)
-
哇这个网站不错。我一发布这个,我就在别处找到了答案(stackoverflow.com/questions/8356842/…)。真对不起。解决方案是使用 NSArray 而不是 NSDictionary,因为响应是一个数组。
-
谢谢,我会这样做的。
-
@Eric D:我必须承认我真的不喜欢他们,所以我投票支持他们尽快消失 :-)