这个问题已被问了一百次,但互联网并没有帮助,主要是因为我是快速编程的新手,所以我提前道歉。
我试图从json中提取一些数据。
这是我的代码:
let request = NSMutableURLRequest(url:myUrl! as URL);
request.httpMethod = "POST";
let postString = "email=\(email)";
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
if error != nil {
print("error=\(error)")
return
}
var err: NSError?
do
{
let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print(myJson)
let name = myJson["name"]
}
catch let error as NSError {
err = error
}
}
task.resume()
这是print(myJson)
中的JSON:
(
{
name = "TestTest";
}
)
但是我收到错误:
let name = myJson["name"]
致命错误:在展开Optional值时意外发现nil (LLDB)
答案 0 :(得分:2)
你遇到的第一个问题是这一行:
let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
指定数据的类型为AnyObject。但它应该是一系列字典。因此,您应该指定:
let myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as [[String:Any]]
当然,仅此一项不会解决问题,因为您必须先从数组中提取项目,然后才能使用字典表示法来获取" name"值。所以,在此之后你必须做这样的事情:
let row = myJson[0]
let name = row["name"]