У меня большая проблема с декодированием JSON с помощью Codable
Я получил ошибку
Тема 1: Неустранимая ошибка: 'попробуй!'выражение неожиданно выдало ошибку: Swift.DecodingError.keyNotFound (SpecieKeys (stringValue: "v", intValue: nil), Swift.DecodingError.Context (codingPath: [_JSONKey (stringValue: "Index 0", intValue: 0)], debugDescription: "Нет значения, связанного с ключом SpecieKeys (stringValue: \" v \ ", intValue: nil) (\" v \ ").", UnderError: nil))
Я трачу много времени, ноЯ не понимаю, почему ..: - (
Это мой JSON
let myJson = """
[{"i":"4","p":"4","l":["Ail"],"ll":["Allium sativum L."]},
{"i":"20.1","l":["Artichaut"],"ll":["Cynara cardunculus"]},
{"i":"XX.3",
"l":["Tomate cerise"],
"ll":["Solanum humboldtii"],
"v":[{"s":1,
"i":"0",
"l":"Orange Grape Tress",
"c":"Orange",
"h":992,
"ss":12
}]
}]
"""
let jsonDATA = myJson.data(using: .utf8)!
и моя структура
struct Specie : Decodable {
var id : String?
var name : [String]?
var latinName : [String]?
var varieties : [Variety]?
// keys
enum SpecieKeys: String, CodingKey {
case id = "i"
case name = "l"
case latinName = "ll"
case varieties = "v"
}
struct Variety : Decodable {
var source : Int?
var id : String?
var color : String?
var name : String?
var photo : String?
var harvest : Int?
var semiShelter : Int?
var semiOutside : Int?
// keys
enum VarietyKeys: String, CodingKey {
case id = "i"
case source = "s"
case color = "c"
case photo = "p"
case harvest = "h"
case semiShelter = "ss"
case semiOutside = "so"
case name = "l"
}
init(from decoder: Decoder) throws
{
let vValues = try decoder.container(keyedBy: VarietyKeys.self)
id = try vValues.decode(String.self, forKey: .id)
source = try vValues.decode(Int.self, forKey: .source)
name = try vValues.decode(String.self, forKey: .name)
color = try vValues.decode(String.self, forKey: .color)
photo = try vValues.decode(String.self, forKey: .photo)
harvest = try vValues.decode(Int.self, forKey: .harvest)
semiShelter = try vValues.decode(Int.self, forKey: .semiShelter)
semiOutside = try vValues.decode(Int.self, forKey: .semiOutside)
}
}
init(from decoder: Decoder) throws
{
let sValues = try decoder.container(keyedBy: SpecieKeys.self)
id = try sValues.decode(String.self, forKey: .id)
name = try sValues.decode(Array<String>.self, forKey: .name)
latinName = try sValues.decode(Array<String>.self, forKey: .latinName)
varieties = try sValues.decode(Array<Variety>.self, forKey: .varieties)
}
}
И последний код
var jsonResult = [Specie]()
jsonResult = try! JSONDecoder().decode(Array<Specie>.self, from: jsonDATA)
Кто-то может помочь мне в моей ошибке.