我正在尝试使用Swift中的Codable协议在某个API端点解析JSON。 您如何正确解码?
到目前为止,我已经创建了一个Model结构来表示位于端点的Post
对象。我还使用JSONDecoder()对Post对象数组进行解码。我已经尝试过将模型重构为具有嵌套结构,但这不起作用。
这是JSON的示例:
[
{
"ID": 1,
"title": "Title 1",
"content": "Content 1"
...
},
{
"ID": 2,
"title": "Title 2",
"content": "Content 2"
...
}
]
这是模型:
struct Post: Codable {
let id: Int
let title, content: String
enum CodingKeys: String, CodingKey {
case id = "ID"
case title, content
}
}
以下是获取代码的示例:
let task = URLSession.shared.dataTask(with: url) {
data, _, error in
if let error = error {
print("Error: Failed to fetch data from url. [\(error.localizedDescription)]")
completion(.failure(error))
return
}
guard let data = data else {
print("Data not available.")
return
}
do {
let decoder = JSONDecoder()
let posts = try decoder.decode([Post].self, from: data)
print("POSTS: : ", posts)
// ^ THIS IS NOT WORKING. I've tried Post.self too.
} catch let jsonError {
//error
}
}
task.resume()
这是我遇到的错误:
ERROR: keyNotFound(CodingKeys(stringValue: "ID", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"ID\", intValue: nil) (\"ID\").", underlyingError: nil))
答案 0 :(得分:0)
您的代码就可以了。您只需要检查json数据即可。在以下情况下显示此错误:
Coding keys
中的某些键与json
数据的键不匹配时。在您的情况下,显然= "ID"
要解决
postMan
中的此检查响应,并使键Codingkeys
中的键完全相同