ios - Swift Json 响应解码
问题描述
试图解码来自 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 解析。
解决方案
把下面的东西放在操场上。下次你必须做这种事情时,记住 Playgrounds 是你的朋友:
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)")
推荐阅读
- php - Laravel,我如何覆盖供应商的代码
- swift - 混合编程和 IB 设计时查看元素不显示
- c - 这个位运算符代码是副作用(K&R C 书中使用的术语)还是机器相关的处理指令?
- android - Android NDK - 本机库添加到现有的 Android Java 库
- sql - SQL 查询返回差异和单独查询返回两个表之间的匹配
- performance - “转到工作表”按钮/工作表会降低 Tableau Server 上的性能
- sharepoint - 从 fsx 脚本编译时 F# 管理引用
- c++ - 如何在 C++ 中动态创建(游戏角色)类的多个对象
- c# - 为什么我不能使用 serveo 而不是 ngrok 来隧道连接到托管在 EC2 服务器上的 mvc 应用程序以在 Twilio 上接收 SMS
- java - Intellij Idea 在调试时执行旧代码