我试图发布2个参数(电子邮件:和密码)从服务器获取具有详细用户信息的响应,我构建API来处理这个并使用Postman获得良好的响应,但是当我尝试用Swift4实现这个新的urlsession时JSON解码和编码,它一直失败,我在解码响应数据时遇到错误 . 这是我使用Postman时的JSON响应:
{
"error": "false",
"message": "downloaded",
"UserInfo": {
"id": 5,
"email": "abc@hotmail.com",
"lastname": "Bence",
"name": "Mark",
"phone": "1234567",
"add1": "333",
"add2": "444",
"city": "ott",
"postalcode": "tttttt"
}
}
我的struct文件:
import UIKit
struct loginPost: Encodable {
let email: String
let password: String
}
struct User: Decodable {
let error: String?
let message: String?
let UserInfo: [UserData]
}
struct UserData: Codable {
let id: Int?
let email: String?
let lastname: String?
let name: String?
let phone: String?
let add1: String?
let add2: String?
let city: String
let postalcode: String?
}
My Function
func downloadJson() {
let url = URL(string: http://192.168.0.10/api/login_hashed.php)
guard let downloadURL = url else { return }
//POST Req
var request = URLRequest(url: downloadURL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let newpost = loginPost(email: "abc@hotmail.com", password: "123456")
do {
let jsonBody = try JSONEncoder().encode(newpost)
request.httpBody = jsonBody
print(jsonBody)
}catch{
print("some error")
}
URLSession.shared.dataTask(with: request) { data, urlResponse, error in
guard let data = data, error == nil, urlResponse != nil else {
print("something is wrong with url")
return
}
print("downloaded..")
do
{
let decoder = JSONDecoder()
let downloaduser = try decoder.decode(User.self, from: data)
self.logmessage = downloaduser.message!
print(self.logmessage)
DispatchQueue.main.async {
// self.tableView.reloadData()
}
} catch {
print("something wrong with decode")
}
}.resume()
}
1 回答
我终于弄明白了,谢谢 . 我只是想提一下这个错误的原因并分享我的经验 . 主要原因是您发送JSON并接收传入响应的方式 . 您应该确切地知道数据的外观,以便以可接受的方式创建结构 . 我的返回数据只是简单的2行文本和文本数组,我的结构是:
我在第18行的错误
它应该是
没有方括号 . 更重要的一点,总是尝试捕获解码错误,并通过实现} catch let JsonErr {,它将为您提供解码无效的原因 .
在我的情况下:
并确保使您的服务器API接受JSON格式的application / json并解码您发送的内容以便接收您要查找的内容; php代码服务API