Я довольно плохо знаком с быстрым языком программирования и пытался заставить его работать в течение последней недели или около того. Я работаю с существующим API, который возвращает JSON данные, структура которых немного меняется в зависимости от того, сколько мест возвращается.
Реальная структура несколько сложнее, но этот пример иллюстрирует проблему. В одном варианте результата я получаю одно возвращаемое место, например:
{
"totalItems": 21,
"pageSize": 2,
"venues": {
"venue":
{
"name": "Venue Name 1"
"location": "Location A",
"showCount": "4"
}
}
}
В другом варианте результата я получаю массив возвращаемых мест:
{
"totalItems": 21,
"pageSize": 2,
"venues": {
"venue":
[{
"name": "Venue Name 1"
"location": "Location A",
"showCount": "4"
},
{
"name": "Venue Name 2"
"location": "Location B",
"showCount": "2"
}]
}
}
Да - владелец этого API должен был возвратить массив независимо, но они этого не сделали, и его нельзя изменить.
Мне удалось заставить его правильно декодироваться для массива мест (или даже если места не были переданы) , но оно прерывается при прохождении одного места (из-за изменения структуры, конечно). Мой код также работал, когда я изменил его для размещения одного места, но затем прервалось возвращение нескольких мест.
То, что я хотел бы сделать, это декодировать любой вариант во внутреннюю структуру, содержащую массив, независимо от того, какой вариант Я получаю, таким образом, делая вещи намного проще для меня, чтобы иметь дело с программным путем потом. Примерно так:
struct Response: Decodable {
let totalItems: Int
let pageSize: Int
let venues: VenueWrapper
struct VenueWrapper: Decodable {
let venue: [Venue] // This might contain 0, 1, or more than one venues
}
struct Venue: Decodable {
let name: String
let location: String
let showCount: Int
}
}
Примечание: в фактическом ответе JSON в ответе есть несколько таких подструктур, как эта (например, одна структура против массива структур), поэтому я почувствовал простое создание альтернативной структуры не было хорошим решением.
Я надеюсь, что кто-то сталкивался с этим раньше. Заранее спасибо!