Я создаю небольшое приложение для практики анализа JSON в виде таблицы и использую API Ticketmaster. Это JSON , и это структуры, которые я настроил:
struct Welcome: Decodable {
let embedded: WelcomeEmbedded
enum CodingKeys: String, CodingKey{
case embedded = "_embedded"
}
}
struct WelcomeEmbedded: Decodable {
let events: [Event]
}
struct Event: Decodable {
let name: String
let dates: Dates
let eventUrl: String?
let embedded: EventEmbedded
enum CodingKeys: String, CodingKey {
case name
case dates
case eventUrl
case embedded = "_embedded"
}
}
struct EventEmbedded: Decodable {
let venue: Venue
}
struct Dates: Decodable {
let start, end: End
}
struct Venue: Decodable {
let name: String
}
Перед добавлением значения let embedded: EventEmbedded
в структуру Event
все работало нормально,но после добавления в эту строку, при запуске приложения я получаю сообщение об ошибке:
Error decoding JSON: typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "_embedded", intValue: nil), CodingKeys(stringValue: "events", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "_embedded", intValue: nil), CodingKeys(stringValue: "venue", intValue: nil)], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))
Мне интересно, как добавление только этой строки приводит к ошибке, это что-то делатьс тем фактом, что у меня есть значение с именем embedded
в двух структурах (Welcome
и Event
), и оба используют ключ кодирования _embedded
?
Для некоторых дополнительных деталей, чтобы проанализировать JSONУ меня есть переменная var eventData = [Event]()
, и я вызываю эту функцию в viewDidLoad
, чтобы заполнить eventData
необходимыми данными:
fetchData(url: apiUrl) { (result: FetchResult<Welcome>) -> (Void) in
switch result {
case .success(let object): self.eventData = object.embedded.events
case .failure(let error): print("\nError decoding JSON: \(error)\n\n")
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
Ошибка также говорит CodingKeys(stringValue: "venue", intValue: nil)], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.
.Но, глядя на JSON, данные в venue
структурированы так же, как и остальные значения, и они не дают мне ошибки.
Что я могу сделать здесь по-другому, чтобы вернуться котслеживать