[您好,我正在使用Swift 5发出HTTP POST请求,该请求返回一个JSON对象列表,我认为这是导致我的错误的原因,我似乎找不到解决方案,因为我搜寻了几乎所有可以即使这似乎是一个基本概念,也可以在stackoverflow和youtube以及Apple文档中找到。这是我的回应:
[ { "_id": "---------------", "phone_number": "xxx-xxx-xxx" "first_name": "Name", "last_name": "LastName", "gender": "Female", "verified": true }, { "_id": "---------------", "phone_number": "xxx-xxx-xxx" "first_name": "Name", "last_name": "LastName", "gender": "Female", "verified": true } ]
我用于发出HTTP请求的代码是:
let url = URL(string: "URLString")! let json: [String:Any] = ["phone_number":phoneNumber] let session = URLSession.shared var request = URLRequest(url: url) request.httpMethod = "POST" do{ request.httpBody = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) }catch let error { print(error.localizedDescription) } //HTTP Headers request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") //URL data task let task = session.dataTask(with: request) { (data, response, error) in guard error == nil else{ print("Error!") return } guard let data = data else{ print("Error fetching data") return } do { guard let responseJSON = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any] else { print("Unable to serialize response!") //FAILS HERE EVERY TIME return } print(responseJSON) print("WOO made it!") }catch let error { print("Error with response!") } } task.resume()
我不确定问题到底是什么,但我已指出问题出在哪里,并且我尝试在转换数据之前先打印出数据,以确保它不为空,并且显示为2000字节,所以我知道不是空的。我的猜测是存在一个问题,因为它采用对象列表的形式,而不是大多数示例中所示的一个对象。有时,我的Express服务器端HTTP主体为零时,我也遇到了一些问题,因此不确定我是否做错了那部分。但是从现在起,我只希望能够解析我的响应,因此我可以开始调试其余部分。感谢您的帮助。
您好,我正在使用Swift 5发出HTTP POST请求,该请求返回一个JSON对象列表,我认为这是导致我的错误的原因,我似乎找不到解决方案,因为我几乎已经搜寻过...] >
您需要[[String:Any]]
而不是[String:Any]
guard let responseJSON = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] else {
print("Unable to serialize response!") //FAILS HERE EVERY TIME
return
}