gpt4 book ai didi

php - Swift JSON 序列化错误

转载 作者:行者123 更新时间:2023-11-28 08:41:24 24 4
gpt4 key购买 nike

我是 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 成为可选。由于可选项符合 CustomStringConvertible 协议(protocol),因此您将得到“Optional(...)”作为字符串

如果您还不知道什么是 Optional,请停止一切并去了解它。现在。 ;)

完成了吗?好的,现在安全地打开可选的,例如,可选绑定(bind):

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

就是这样。

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

关于php - Swift JSON 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com