Расшифровка гетерогенного массива
Я нашел много примеров, касающихся реализации для декодирования массива разнородных объектов, но они не совсем соответствуют моей ситуации.
Вот мой JSON:
{
"response": [
{
"label": "Shore",
"marineReports": [
{
"id": 1,
"label": "Label"
},
{
"id": 2,
"label": "Label"
}
]
},
{
"label": "Open Sea",
"marineReports": [
{
"id": 0,
"label": "Label"
},
{
"id": 0,
"label": "Label"
}
]
},
{
"label": "Offshore",
"marineReports": [
{
"id": 3,
"label": "Label"
},
{
"id": 3,
"label": "Label"
},
{
"id": 3,
"label": "Label"
}
]
},
{
"label": "Special Reports",
"specialReports": [
{
"label": "Atlantic-Channel",
"reports": [
{
"id": 12,
"label": "Offshore Atlantic"
},
{
"id": 17,
"label": "Channel"
}
]
}
]
}
]
}
Вот что я реализовал сначала:
struct ResponseSea: Codable {
let result: [SeaArea]
}
struct SeaArea: Codable {
var label: String
var reports: [MarineReport]
struct MarineReport: Codable {
var id: Int
var label: String
}
}
Но потом я понял, что последний объект в результирующем массиве отличается от других. Как я могу реализовать пользовательскую логику синтаксического анализа для конкретного объекта в массиве того же типа объекта?
1 ответ
Решение
Исходя из вашего JSON это должно быть так:
struct RootObject: Codable {
let response: [Response]
}
struct Response: Codable {
let label: String
let marineReports: [Report]?
let specialReports: [SpecialReport]?
}
struct Report: Codable {
let id: Int
let label: String
}
struct SpecialReport: Codable {
let label: String
let reports: [Report]
}
marineReports
а также specialReports
являются необязательными, поскольку они могут отсутствовать.