Разбор JSON Data Swift 5 - PullRequest
0 голосов
/ 28 мая 2020

Мне не удается получить доступ к некоторым данным JSON, показывающим праздники в США. По какой-то причине вместо списка праздников я получаю сообщение «Календарь (праздники: nil)», и я не знаю почему.

Я использую Calendarifi c API, который возвращает:

{
    "meta": {
        "code": 200
    },
    "response": {
        "holidays": [
            {
                "name": "Independence Day",
                "description": "On Independence Day, Americans celebrate the anniversary of publication of the Declaration of Independence from Great Britain in 1776.",
                "country": {
                    "id": "us",
                    "name": "United States"
                },
                "date": {
                    "iso": "2019-07-04",
                    "datetime": {
                        "year": 2019,
                        "month": 7,
                        "day": 4
                    }
                },
                "type": [
                    "National holiday"
                ],
                "locations": "All",
                "states": "All"
            }
        ]
    }
}

В моей попытке обработать данные я создал один Calendar.swift файл, как показано здесь:

//  Calendar.swift

import Foundation
struct Calendar: Codable {

    var holidays: [Holidays]?

}

struct Holidays: Codable {
    var name: String?
    var description: String?

}

И настроил свой ViewController, например это:

//
//  ViewController.swift
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let urlString = "https://calendarific.com/api/v2/holidays?&api_key=NO_KEY_SHOWN_FOR_POST&country=US&year=2019&month=7&day=4"

        let url = URL(string: urlString)

        guard url != nil else {
            return
        }

        let session = URLSession.shared

        let dataTask = session.dataTask(with: url!) { (data, response, error) in

            if error == nil && data != nil{

                let decoder = JSONDecoder()

                do {

                let result = try decoder.decode(Calendar.self, from: data!)

                print(result)
            }

            catch {
                print("Error Parsing")
            }
        }
    }


        dataTask.resume()

   }

}

Что происходит и почему я не могу получить результат к празднику?

1 Ответ

0 голосов
/ 28 мая 2020

Попробуйте этот кодируемый код для анализа JSON

import Foundation

// MARK: - Calendar
struct Calendar: Codable {
    var meta: Meta
    var response: Response
}

// MARK: - Meta
struct Meta: Codable {
    var code: Int
}

// MARK: - Response
struct Response: Codable {
    var holidays: [Holiday]
}

// MARK: - Holiday
struct Holiday: Codable {
    var name, holidayDescription: String
    var country: Country
    var date: DateClass
    var type: [String]
    var locations, states: String

    enum CodingKeys: String, CodingKey {
        case name
        case holidayDescription = "description"
        case country, date, type, locations, states
    }
}

// MARK: - Country
struct Country: Codable {
    var id, name: String
}

// MARK: - DateClass
struct DateClass: Codable {
    var iso: String
    var datetime: Datetime
}

// MARK: - Datetime
struct Datetime: Codable {
    var year, month, day: Int
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...