Ключ не найден, изо всех сил пытается разобрать вложенный JSON в Swift 4 - PullRequest
0 голосов
/ 28 апреля 2019

Мне не удается правильно проанализировать этот JSON, я получаю следующую ошибку:

"keyNotFound (CodingKeys (stringValue:" GameEntries ", intValue: nil), Swift.DecodingError.Context (codingPath: [], debugDescription: "Нет значения, связанного с ключом CodingKeys (stringValue: \" GameEntries \ ", intValue: nil) (\" GameEntries \ ").", basedError: nil)) "

Я думаю, что моя проблемавероятно, из-за разбора словаря и массива, но я начинаю заблудиться.

JSON:

{
    fullgameschedule =     {
        gameentry =         (
                        {
                awayTeam =                 {
                    Abbreviation = SEA;
                    City = Seattle;
                    ID = 123;
                    Name = Mariners;
                };
                date = "2019-03-20";
                homeTeam =                 {
                    Abbreviation = OAK;
                    City = Oakland;
                    ID = 125;
                    Name = Athletics;
                };
                id = 48847;
                location = "Tokyo Dome";
                time = "5:35AM";
            },
                        {
                awayTeam =                 {
                    Abbreviation = CHC;
                    City = Chicago;
                    ID = 131;
                    Name = Cubs;
                };
                date = "2019-09-29";
                homeTeam =                 {
                    Abbreviation = STL;
                    City = "St. Louis";
                    ID = 133;
                    Name = Cardinals;
                };
                id = 48879;
                location = "Busch Stadium";
                time = "3:15PM";
            }
        );
        lastUpdatedOn = "2019-04-27 9:38:51 AM";
    };
}

Мои структуры:

struct FullGameSchedule: Decodable
{
    let GameEntries: GameEntries
    let lastUpdatedOn: String
}

struct GameEntries: Decodable
{
    let Games = [Game]()
}

struct Game: Decodable
{
    let awayTeam: Team
    let date: String
    let homeTeam: Team
    let id: Int
    let location: String
    let time: String
}

struct Team: Decodable
{
    let Abbreviation: String
    let City :String
    let ID: Int
    let Name:String
}

Мойпарсинг:

guard let url = URL(string: "blah") else { return }

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

            guard let data = data else {return }

            do {

                let games = try JSONDecoder().decode(FullGameSchedule.self, from: data)
                print(games)

                //let json = try JSONSerialization.jsonObject(with: data, options: [])
                //print(json)

            } catch {
                print(error)
            }
        }.resume()

Я надеюсь, что смогу включить JSON в игровой объект, чтобы затем отфильтровывать и извлекать конкретные сведения о произвольных играх в течение сезона на основе пользовательского ввода.

1 Ответ

0 голосов
/ 28 апреля 2019

Ваши имена свойств и первые две структуры не соответствуют вашему JSON. Вам нужно:

struct FullGameSchedule: Decodable
{
    let fullgameschedule: GameEntries
}

struct GameEntries: Decodable
{
    let gameentry: [Game]
    let lastUpdatedOn: String
}

Вы также можете использовать указание CodingKeys, чтобы вы могли правильно назвать свои свойства структуры с помощью соответствующего camelCase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...