在swift中从JSON中提取数据

时间:2017-03-27 13:22:59

标签: json swift xcode api

这个问题已被问了一百次,但互联网并没有帮助,主要是因为我是快速编程的新手,所以我提前道歉。

我试图从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)

1 个答案:

答案 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"]