正在尝试解码来自https调用的json响应。进行解码的代码:
if let data = responseData, let _ = String(data: data, encoding: .utf8) {
if let httpResponse = response as? HTTPURLResponse{
if httpResponse.statusCode == 401 {
print("Not Authorized")
} else if httpResponse.statusCode == 200 {
let decoder = JSONDecoder()
let model: [ListResponse] = try! decoder.decode([ListResponse].self, from: data)
print("Model: \(model)")
}
}
}
它只是一直输出一个空数组。我明显漏掉了什么有人能帮上忙吗?我可以使用从Swift传递的相同信息从PostMan调用api的方法,它会返回我的值。由于某些原因,对返回的json的解析失败了,没有任何错误。
编辑:响应数据:
[
{
"id": 1,
"numb": "12345",
"bName": "Test Tester",
"clDate": "2018-12-31T00:00:00",
"currSt": "OK",
"proPerc": 10,
"prop": "TBD"
},
{
"id": 2,
"numb": "123456",
"bName": "Test Tester2",
"clDate": "2018-12-31T00:00:00",
"currSt": "OK",
"proPerc": 20,
"prop": "TBD"
}
]
归根结底是从上面解析clDate的问题。只有在我将json转换为字符串并尝试解析它时,才发现了这个错误。现在正在尝试弄清楚如何处理日期json解析。
发布于 2019-01-01 08:13:33
把下面的东西放在操场上。下次你要做这类事情的时候,记住游乐场是你的朋友:
struct ListResponse: Decodable {
let id: Int
let numb: String
let bName: String
let clDate: Date
let currSt: String
let proPerc: Int
let prop: String
}
let myDateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone(secondsFromGMT: 0)
return formatter
}()
let text =
"""
[
{
"id": 1,
"numb": "12345",
"bName": "Test Tester",
"clDate": "2018-12-31T00:00:00",
"currSt": "OK",
"proPerc": 10,
"prop": "TBD"
},
{
"id": 2,
"numb": "123456",
"bName": "Test Tester2",
"clDate": "2018-12-31T00:00:00",
"currSt": "OK",
"proPerc": 20,
"prop": "TBD"
}
]
"""
let data = text.data(using: .utf8)!
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(myDateFormatter)
let model: [ListResponse] = try! decoder.decode([ListResponse].self, from: data)
print("Model: \(model)")
https://stackoverflow.com/questions/53991722
复制相似问题