我试图从我的网络服务器上的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]]
但是现在出现了这个错误。
如果有人能够解释它的含义,并且可能想出一个解决方案,我会感到惊讶。
提前致谢。
PS: 我知道这个论坛上有一些问题可能已经包含了我的问题的答案。我对SWIFT编程太新了,我不得不问一个关于我的具体案例的问题来找到答案。
答案 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]] {
}