У root есть только один массив, который [Loan]
- получается, что не , что у вас есть. Ваш JSON является объектом верхнего уровня с одним свойством results
, которое содержит массив объектов. Кроме того, структура данных не выглядит рекурсивной, как предполагает модель данных в вашем вопросе.
Учитывая пример JSON, вы можете либо явно назвать каждое из результатов, например, так:
struct Results: Codable {
let results: [Result]
}
struct Result: Codable {
let locale, date: String
let totalsByPaymentType: TotalsByPaymentType
}
struct TotalsByPaymentType: Codable {
let efectivo, tarjetaDeCredito, chequeGourmet, ticketRestaurantes,
restoIn, sodexo, friend: Total
enum CodingKeys: String, CodingKey {
case efectivo = "Efectivo"
case tarjetaDeCredito = "Tarjeta de Credito"
case chequeGourmet = "Cheque Gourmet"
case ticketRestaurantes = "Ticket Restaurantes"
case restoIn = "Resto-In"
case sodexo = "Sodexo"
case friend = "Friend"
}
}
struct Total: Codable {
let counted, registered: Int
}
или соберите все суммы платежей в словаре:
struct Results: Codable {
let results: [Result]
}
struct Result: Codable {
let locale, date: String
let totalsByPaymentType: [String: Total]
}
Какой подход использовать, зависит от того, как динамически c изменяются значения «типов платежей». Это фиксированный список? Тогда go для свойств. Меняется ли это каждые пару недель или месяцев? Затем используйте словарь.
В любом случае вы анализируете это, используя
do {
let results = try JSONDecoder().decode(Results.self, from: data)
for result in results.results {
// handle each result
}
} catch {
print(error)
}
(NB. В этом случае вам, вероятно, следует избегать обобщенных c имен, таких как Result
, но я не недостаточно хорошо понимаю ваш вариант использования, чтобы сделать соответствующие предложения)