从SWIFT 3中的网页中读取JSON格式

时间:2016-09-04 10:56:58

标签: ios json swift

我试图从我的网络服务器上的JSON文件中获取数据。在SWIFT的早期版本中,这得到了解决:

self.url = "https://www.example.com/example"
let requestURL: URL = URL(string: self.url)!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest) {
    (data, response, error) -> Void in

    let httpResponse = response as! HTTPURLResponse
    let statusCode = httpResponse.statusCode

    if (statusCode == 200) {

        do{

            let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]]

            if let stations = json["ticket"] as? [[String: AnyObject]] {

                for station in stations! {

                    if let status = station["status"] as? String {
                        self.resultStatus = status

                        if let name = station["name"] as? String {
                            self.clientName = name

                            if let type = station["type"] as? String {
                                self.ticketType = type
                                self.setThemeResult()
                            }
                        }
                    }
                }

            }

        } catch {
            print("Error with Json: \(error)")
        }

    }
}
task.resume()

嗯......我知道它可能有点乱,但确实有效。 :)在SWIFT 3中,xcode对代码进行了一些更改。 :此

let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]]

成了

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [[String: AnyObject]]

但是现在出现了这个错误。 this

如果有人能够解释它的含义,并且可能想出一个解决方案,我会感到惊讶。

提前致谢。

PS: 我知道这个论坛上有一些问题可能已经包含了我的问题的答案。我对SWIFT编程太新了,我不得不问一个关于我的具体案例的问题来找到答案。

1 个答案:

答案 0 :(得分:1)

我认为您的回复是Dictionary而不是Array,因此您需要撰写[String: Any]代替[[String: Any]]

 let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]
 if let stations = json["ticket"] as? [[String: Any]] {

 }

注意:如果您的响应是Array,请尝试访问数组的第一个对象以获取字典。

 if let stations = json[0]["ticket"] as? [[String: Any]] {

 }