我在尝试解码JSON时遇到了以下错误。奇怪的是,我在其他端点上使用过类似的代码,但使用UUID时没有问题。
错误:
未找到密钥(编码密钥(字符串值:"id",整数值:nil)、Swift.解码错误.上下文(编码路径:[_JSON密钥(字符串值:"索引0",整数值:0)],调试说明:"没有与密钥CodingKeys关联的值(字符串值:"id",整数值:nil)("id")."",基础错误:无)
这是我的课
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()
}
这是我的UI代码
@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"
}
]
2条答案
按热度按时间djmepvbi1#
请仔细阅读JSON。关键字
id
在哪里?这正是错误消息所说的。我猜你的结构体符合
Identifiable
的 * 硬编码 * UUID。如果是这样,你必须添加CodingKeys
以排除id
被解码。z9smfwbn2#
我认为
id
必须是optional
,所以在你的代码中发生的是,JSON_VALUE
试图写入id
键,从你所展示的来看,很明显没有名为id
的键。我假设您可能也会遇到以下错误:
错误非常简单
No value associated with key CodingKeys(stringValue: \"id\", intValue: nil) (\"id\").
这是可以解决的。
您的当前代码必须是:
问题出在
public var name :String
这一行,它可以通过在String
或String?
后面添加一个?
来避免错误,这意味着您正在创建optional
或nullable
。最后,更新后的代码应该如下所示: