我尝试将关键参数和JSON字典主体发送到API,但由于某些原因无法工作。
这是我到目前为止的工作。
@IBAction func POST(_ sender: Any) {
let url = URL(string: "http://apilink.com/updateProfile&=param")!
let jsonObject = ["FName":"Tarik",
"LName":"Salama"]
let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [])
var request = URLRequest(url: url)
request.httpMethod = "post"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
print("error:", error)
return
}
do {
guard let data = data else { return }
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return }
print("json:", json)
} catch {
print("error:", error)
}
}
task.resume()
}
当我点击POST按钮时,我得到了这个错误:
error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text未以数组或对象开头,并且未设置允许片段的选项。“UserInfo={NSDebugDescription=JSON文本未以数组或对象开头,并且未设置允许片段的选项。}
我做错了什么?在我检查了其他一些线程后,我尝试更改一些东西,比如将参数和数据字典放入key:value字典中,但API响应并指出数据无效,这意味着整个事件以不正确的格式发送。注意:我不被允许使用像Alamofire这样的第三方库,API链接工作正常,如截图所示。
发布于 2017-06-07 11:28:43
您可以通过打印响应数据来检查问题
do {
guard let data = data else { return }
print(String(data: data, encoding: .utf8) ?? "No Conversion") //Print Here
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return }
print("json:", json)
} catch {
print("error:", error)
}
看看“Print Here”这行。我认为响应不是有效的json,所以当您尝试将数据解析为JSOn时,它总是以catch块结束。
https://stackoverflow.com/questions/44411062
复制相似问题