可解码Json,功能根本运行?
Decodable Json, function doesn't run at all?
我知道这个可解码的 json 问题已被问过很多次,in-fact 我能够为我的其他项目之一进行数据检索。但是,我似乎无法让它发挥作用。 IT 负责检索数据、解码并存储数据。但是,我的打印功能从来没有 运行。我没有看到 "executed" 打印等等。它确实使用 api 中的 headers 打印 httpResponse,所以我知道它正在工作并且有响应。
可解码
struct GetId: Decodable {
let id : String?
let deck_id : String?
var completed_at : String?
let created_at : String?
let locale_key : String?
let profile_id : String?
let recommendation_id : String
let package_id : String?
let status : String?
let scoring_scale : String?
}
示例响应
{
"id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
"deck_id": "career-deck",
"completed_at": null,
"created_at": 1551867228744,
"locale_key": "en-US",
"profile_id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
"recommendation_id": null,
"package_id": null,
"status": "created",
"scoring_scale": "NORMAL"
}
我的函数
func requestId()
{
let headers = [
"Authorization": "Basic XXXxxxxXXxxXXXXxxxXXX:x",
"Content-Type": "application/json",
"cache-control": "no-cache"
]
let parameters = ["deck_id": "career-deck"] as [String : Any]
let postData = try? JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.traitify.com/v1/assessments")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = (postData as! Data)
//let session = URLSession.shared
//let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
if let getIdd = try? JSONDecoder().decode([GetId].self, from: data!){
getId = getIdd
print(getId[0].id)
print("executed")
}
}
}
task.resume()
}
根据您的示例,created_at
不是字符串(它是一个数值)并且 recommendation_id
需要是可选的(与所有其他字段一样)。
此外,您的示例是单个记录,但您正在解码对象数组。将解码更改为 JSONDecoder().decode(GetId.self, from: data!)
我知道这个可解码的 json 问题已被问过很多次,in-fact 我能够为我的其他项目之一进行数据检索。但是,我似乎无法让它发挥作用。 IT 负责检索数据、解码并存储数据。但是,我的打印功能从来没有 运行。我没有看到 "executed" 打印等等。它确实使用 api 中的 headers 打印 httpResponse,所以我知道它正在工作并且有响应。
可解码
struct GetId: Decodable {
let id : String?
let deck_id : String?
var completed_at : String?
let created_at : String?
let locale_key : String?
let profile_id : String?
let recommendation_id : String
let package_id : String?
let status : String?
let scoring_scale : String?
}
示例响应
{
"id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
"deck_id": "career-deck",
"completed_at": null,
"created_at": 1551867228744,
"locale_key": "en-US",
"profile_id": "XXXXXXX-XXX-4c6a-XXXX-1XXXXXXX223",
"recommendation_id": null,
"package_id": null,
"status": "created",
"scoring_scale": "NORMAL"
}
我的函数
func requestId()
{
let headers = [
"Authorization": "Basic XXXxxxxXXxxXXXXxxxXXX:x",
"Content-Type": "application/json",
"cache-control": "no-cache"
]
let parameters = ["deck_id": "career-deck"] as [String : Any]
let postData = try? JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.traitify.com/v1/assessments")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = (postData as! Data)
//let session = URLSession.shared
//let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
if let getIdd = try? JSONDecoder().decode([GetId].self, from: data!){
getId = getIdd
print(getId[0].id)
print("executed")
}
}
}
task.resume()
}
根据您的示例,created_at
不是字符串(它是一个数值)并且 recommendation_id
需要是可选的(与所有其他字段一样)。
此外,您的示例是单个记录,但您正在解码对象数组。将解码更改为 JSONDecoder().decode(GetId.self, from: data!)