【发布时间】:2025-11-25 18:50:02
【问题描述】:
我在尝试解码 JSON 时收到以下错误。奇怪的是我在其他端点上使用了类似的代码,使用 UUID 没有问题。
错误:
keyNotFound(CodingKeys(stringValue: "id", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "没有与键 CodingKeys 关联的值(stringValue: "id", intValue: nil) ("id").", underlyingError: nil))
这是我的课
class Api: ObservableObject {
@State private var showingAlert = false
// completion handler for JSON Data
func getUserData(url: String, completion : @escaping ([RunClubsv2])->()){
let session = URLSession(configuration: .default)
session.dataTask(with: URL(string: url)!) { (data, _, err) in
if err != nil{
print(err!.localizedDescription)
return
}
//decoding JSON
do {
let users = try JSONDecoder().decode([RunClubsv2].self, from: data!)
print(users)
//returning data
completion(users)
}
catch{
print(error)
}
}
.resume()
}
这是我的用户界面代码
@State var runclubv2: [RunClubsv2] = []
var body: some View {
VStack {
if runclubv2.isEmpty{
Text("damn it")
}
else {
//display data
List(runclubv2) { runclubv2 in
Text(runclubv2.name)
}
}
}
.onAppear{
Api().getUserData(url: "<URL EndPoint>") { ([RunClubsv2]) in
self.runclubv2 = self.runclubv2
}
}
}
}
这是响应数据
[
{
"name": "Joggers for Lagers",
"location": "Amor Artis Brewery, Fort Mill",
"date": "6:30 PM",
"category": "Monday"
},
{
"name": "Old Armor Run Club",
"location": "Kannapolis",
"date": "6:00 PM",
"category": "Monday"
}
]
【问题讨论】:
-
你的
id结构中有一个id属性,它可能需要是可选的:) -
创建一个 CodingKey 枚举,其中仅包含您从 json 获得的属性(不包括我假设的 id)所以
enum CodingKeys: String, CodingKey { case name, location, date, category } -
你不能让 UUID() 成为我认为的可选项。
-
@Robert 你可以手动生成
id(如果你需要的话)而不是从 JSON 中解码它,因为它不存在。
标签: json swift swiftui jsondecoder