我有一个简单的模型,我定义它来解码一个结构。
但它无法解码。
有人能告诉我我做错了什么吗?
struct Model: Codable {
let firstName: String
let lastName: String
let age: Int
enum Codingkeys: String, CodingKey {
case firstName = "first_name"
case lastName = "last_name"
case age
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let session = URLSession.shared
let url = URL(string: "https://learnappmaking.com/ex/users.json")!
let task = session.dataTask(with: url) { (data, response, error) in
let decoder = JSONDecoder()
let d = try! decoder.decode([Model].self, from: data!) //fails here
print(d)
}
task.resume()
}
}
我再次检查了JSON是否正确,但它仍然无法解码。
显示的错误
线程5:致命错误:“尝试!”表达式意外引发错误:
swift.decodingerror.keynotfound(编码键(stringvalue:“firstname”,
intvalue:nil),swift.decodingerror.context(编码路径:
[_jsonkey(stringvalue:“index 0”,intvalue:0)],debugdescription:“no
与键编码键关联的值(stringvalue:\“firstname\”,
intvalue:nil)(“firstname\”“)“,underlyingError:nil)
它一直在寻找
firstName
但是我有一个枚举要检查
first_name
.
这是JSON有效载荷
[
{
"first_name": "Ford",
"last_name": "Prefect",
"age": 5000
},
{
"first_name": "Zaphod",
"last_name": "Beeblebrox",
"age": 999
},
{
"first_name": "Arthur",
"last_name": "Dent",
"age": 42
},
{
"first_name": "Trillian",
"last_name": "Astra",
"age": 1234
}
]
我知道我可以补充
decoder.keyDecodingStrategy = .convertFromSnakeCase
但是我想知道为什么现有的代码不能工作?