我试图将一个关键参数和一个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按钮时出现此错误:
错误:错误域= NSCocoaErrorDomain代码= 3840" JSON文本不是以数组或对象开头,而是选项允许未设置片段。" UserInfo = {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}
我做错了什么? 在我检查了一些其他线程之后,我尝试更改了一些内容,例如将参数和数据字典放入一个键:值字典,但API响应并说数据无效,这意味着整个事件的格式不正确。 注意:我不允许使用像Alamofire这样的第三方库,API链接工作正常,如屏幕截图所示。
答案 0 :(得分:0)
您可以通过打印回复数据来检查问题
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)
}
查看“打印在这里”行。我相信响应不是一个有效的json,所以当你试图将数据解析为JSOn时,它总是以catch块结束。