![](/img/trans.png)
[英]swift - Decoding JSON response (post comments) from Reddit API
[英]Swift Json Response Decoding
嘗試解碼來自 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)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.