Я хочу проанализировать JSON с вложенной структурой.
Я создал пару структур с обязательными полями и сейчас пытаюсь их использовать.
Вот так выглядит JSON (Eventful API):
{
"last_item": null,
"total_items": "1194",
"first_item": null,
"page_number": "1",
"page_size": "10",
"page_items": null,
"search_time": "0.143",
"page_count": "120",
"events": {
"event": [
{
"watching_count": null,
"olson_path": "Europe/London",
"calendar_count": null,
"comment_count": null,
"region_abbr": "London",
"postal_code": null,
"going_count": null,
"all_day": "0",
"latitude": "51.5009088",
"groups": null,
"url": "http://london.eventful.com/events/zucchero-/E0-001-120935308-6?utm_source=apis&utm_medium=apim&utm_campaign=apic",
"id": "E0-001-120935308-6",
"privacy": "1",
"city_name": "London",
"link_count": null,
...
Вот такЯ пытаюсь сделать:
struct Event: Codable {
var id: String
var title: String
var latitude: Double
var longitude: Double
var url: URL
var venueAddress: String
var regionName: String
var image: [Image]
enum CodingKeys: String, CodingKey {
case id
case title
case latitude
case longitude
case url
case venueAddress = "venue_address"
case regionName = "region_name"
case image
}
struct Events: Codable {
var events: [Event]
}
let apiUrlString = "http://api.eventful.com/json/events/......."
var event = [Event]()
func parse(json: Data) {
DispatchQueue.global().async { [weak self] in
let decoder = JSONDecoder()
if let jsonEvents = try? decoder.decode(Events.self, from: json) {
self?.event = jsonEvents.events
}
}
}
@IBAction func searchButtonTapped(_ sender: UIButton) {
if let url = URL(string: apiUrlString) {
if let data = try? Data(contentsOf: url) {
parse(json: data)
print(event)
} else {
showError()
}
} else {
showError()
}
}
Parse func работает нормально, но мой массив всегда пуст. Я думаю, что я мог бы внести некоторые изменения в свои события и структуры событий. Если у вас есть предложения, пожалуйста, помогите.