У меня есть JSON объект с инкрементными именами для анализа, и я хочу сохранить выходные данные в объект с полем имени и списком поля питомца. Я обычно использую JSONDecoder, поскольку он довольно удобен и прост в использовании, но я не хочу жестко кодировать CodingKey, так как считаю, что это очень плохая практика.
Ввод:
{"shopName":"KindHeartVet", "pet1":"dog","pet2":"hamster","pet3":"cat", ...... "pet20":"dragon"}
Объект, в котором я хочу сохранить результат, выглядит примерно так:
class VetShop: NSObject, Decodable {
var shopName: String?
var petList: [String]?
private enum VetKey: String, CodingKey {
case shopName
case petList
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: VetKey.self)
shopName = try? container.decode(String.self, forKey: .shopName)
// implement storing of petList here.
}
}
Я много борюсь за то, что CodingKey - это enum, его пусть константы, поэтому я не могу изменить (и не должен изменять) константу, но мне нужно сопоставить petList с полем «petN», где N - увеличивающееся число.
РЕДАКТИРОВАТЬ :
Я определенно не могу изменить структуру ответа API, потому что это публичный c API, а не то, что я разработал, я просто пытаюсь проанализировать и получить значение из этого API, надеюсь, это убери путаницу!