#swift #api
#swift #API
Вопрос:
У меня есть следующий ответ от API :
[803442,1605299,1605300,1880804,1880806,1880808,1880810,1880811,1880817,1880819,1880820,1880825,1880826,1880828,1880829,1880830,1880831,1880832,1880833,1880834,1880835,1880836,1880844,1880847,1880849,1880850,1880851,1880862,1880863,1880864]
Просто массив Int
Я пытаюсь декодировать его с помощью JSONDecoder, но поскольку у него нет имени, это сбивает меня с толку.
Если у меня есть что-то вроде этого
{"results":[{"device_id":4085245,"locations":[{"time":1553285663,"lat":2.8019,"lon":-60.7276,"accuracy":80,"seq_number":722},{"time":1553328699,"lat":2.8025,"lon":-60.7266,"accuracy":14503,"seq_number":723}]}]}
Я знаю, как это сделать, поскольку я могу построить структуру следующим образом
struct results: Decodable {
var device_id: Int
var locations: [locations]
}
struct locations: Decodable {
var time: Int
var lat: Double
var lon: Double
var accuracy: Double
var seq_number: Int
}
Но в первом случае я не знаю, как это сделать.
У кого-нибудь есть предложения, пожалуйста.
Спасибо
Комментарии:
1. Просто декодируйте
[Int].self
Ответ №1:
Int
уже Decodable
есть, поэтому вы можете легко декодировать массив этого типа
do {
let array = try JSONDecoder().decode([Int].self, from: data)
} catch { print(error) }
Комментарии:
1. Ссылка: как объявлять пользовательские типы, автоматически соответствующие
Codable
: Самый простой способ сделать тип кодируемым — объявить его свойства, используя типы, которые уже кодируются. К этим типам относятся стандартные типы библиотек, такие как String, Int и Double
Ответ №2:
Это Array
оф Int
. Поскольку оба Int
и Array
уже Codable
есть, вы можете просто напрямую его декодировать. Пример игровой площадки:
import UIKit
import PlaygroundSupport
let data = "[803442, 1605299, 1605300, 1880804, 1880806, 1880808, 1880810, 1880811, 1880817, 1880819, 1880820, 1880825, 1880826, 1880828, 1880829, 1880830, 1880831, 1880832, 1880833, 1880834, 1880835, 1880836, 1880844, 1880847, 1880849, 1880850, 1880851, 1880862, 1880863, 1880864]".data(using: .utf8)!
if let decoded = try? JSONDecoder().decode([Int].self, from: data) {
print(decoded)
}