我google了很多,几乎复制了我从教程在线找到的代码,只是简单地将Swift中的json String解析为可用的对象。
代码:
func parseJson(json: String) -> [AnyObject] {
let data = json.dataUsingEncoding(NSUTF8StringEncoding)
do {
if let array = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? [AnyObject] {
return array
}
}
catch {
// Error hanndling here
}
return [AnyObject]()
}
Json String我试图解析:
"response":{"loggedIn":false,"message":"Some errormessage here"}}
会发生什么: 该程序不会跳转到if let array = ...它会停在那里,因为它无法将字符串解析为json(或AnyObject),只会返回AnyObject。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
稍微调整一下代码以便进行更好的调试:
func parseJson(json: String) -> [AnyObject] {
let data = json.dataUsingEncoding(NSUTF8StringEncoding)
do {
let parsed = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
if let array = parsed as? [AnyObject] {
return array
}
}
catch {
print(error)
}
return [AnyObject]()
}
那里有两处变化:
JSONObjectWithData
和as?
转换。在操场上快速粘贴会发现错误被捕获:“JSON文本不是以数组或对象开头,而是选项允许未设置碎片。”您的JSON片段缺少开头{
。
修复问题后,您会看到parsed
已设置,但随后的if let array = parsed as? [AnyObject]
会失效。那是因为您的顶级元素是字典而不是数组,因此转换为[AnyObject]
失败。