可编码处理单个或数组



当数组包含一个元素时,我们的 API 会在数据中发送单个对象:

{
"data":{
"name":"ABC",
"age":"26"
}
}

但是当数组中有更多元素时,响应在数组中

{
"data":[{
"name": "ABC",
"age" : "26"
},
{
"name": "XYZ",
"age" : "22"
}]
}

对我来说似乎是一个糟糕的 API 设计。

您的 API 应该在data字段中返回一个数组,无论计数如何。

{ "data":[{ "name": "XYZ", "age" : "22" }] }

{ "data":[{ "name": "ABC", "age" : "26" }, { "name": "XYZ", "age" : "22" }] }

这样做

struct Root  : Codable {
let data:[DItem]
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
do {
data = try container.decode([DItem].self, forKey: .data)
}
catch {
let res = try container.decode(DItem.self, forKey: .data)
data = [res]
}
}
}
struct DItem: Codable {
let name,age:String 
}

let res = try JSONDecoder().decode(Root.self, from:data)

直到您修复响应

最新更新