无法从 JSONDecoder 获取数据,没错,是我编的结构?
Posted
技术标签:
【中文标题】无法从 JSONDecoder 获取数据,没错,是我编的结构?【英文标题】:Unable to get data from JSONDecoder ,that's right, I made up the structure? 【发布时间】:2019-05-29 16:59:57 【问题描述】:我有这样的结构,我拿了一块来获取数据。这是我的代码。为什么我不能从 Api 获取数据?任何人都可以帮助并在答案中写示例。看起来一切都是正确的。我将不胜感激。
[
"id": 142636,
"apiId": 353056,
"shortName": "K. McKenzie-Lyle",
"firstName": "Kai",
"middleName": null,
"lastName": "McKenzie-Lyle",
"imageFileName": null,
"height": 195,
"weight": 86,
"birthDate": "1997-11-30T00:00:00",
"contractExpiration": null,
"onLoanSquadTillDate": null,
"oldApiId": 344534,
"age": 22,
"birthAreaId": 80,
"passportAreaId": 110,
"footName": "Right",
"male": true,
"currentSquadId": 20401,
"parentSquadId": 46,
"nationalSquadId": 31885,
]
我的代码结构尝试了 decode 和 "id" 等。
struct PlayerRoster:Codable
let id: String?
let apiId:String?
let shortName: String?
let firstName: String?
let middleName:String?
let lastName:String?
let imageFileName:String?
let height:Double?
let weight:Double?
我的加载 url api 地址。
func loadingApi()
let urlData = "https://apidev.transferroom.com/api/values"
guard let url = URL(string: urlData) else return
let task = URLSession.shared.dataTask(with: url) (data,response,error) in
guard let data = data else return
guard error == nil else return
do
let decoder = JSONDecoder()
//using the array to put values
let player = try decoder.decode(PlayerRoster.self, from: data)
self.updatedPlauers = player
catch let error as NSError
print("Failed to load: \(error.localizedDescription)")
task.resume()
【问题讨论】:
一些注意事项:id 和 apiId 是整数,而不是字符串。不要让所有属性都是可选的,只有那些实际上可能为空的。打印error
对象而不是localizedDescription,它包含更多信息print(error)
【参考方案1】:
你需要
let player = try decoder.decode([PlayerRoster].self, from: data)
您的 json 的根是由 []
指示的数组,这样做有助于了解问题
catch
print("Failed to decode : \(error)")
加
let id: Int?
let apiId:Int?
【讨论】:
以上是关于无法从 JSONDecoder 获取数据,没错,是我编的结构?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 5:如何从 JSONDecoder().decode 获取数据?