Проблемы с разбором json из Scryfall - PullRequest
0 голосов
/ 13 июля 2020

Итак ... Я новичок в этом. Пытаюсь научиться программировать, может быть, с апреля. Но я всегда был тачем. Итак ... отказ от ответственности ...

Я пытаюсь сделать приложение Magi c на основе Gathing. Я пытаюсь использовать базу данных Scryfall в качестве бэкэнда (поэтому мне не нужно самому каталогизировать все 20 000 карт). Но я сталкиваюсь с ошибками при разборе json.

. Я пробовал следовать вместе с серией видеороликов «Взлом с помощью Swift». Я пробовал два основных способа.

Метод 1. Загрузка большого количества данных, сохранение их в проект и их локальный анализ.

Метод 2. Использование URLSession.

Оба раза я застреваю в одном и том же месте.

if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data)

Каким-то образом эта часть всегда выходит из строя. Он работает ТОЛЬКО, если я вставляю (очень маленькую) часть json как let json = """ [{ stuff: stuff, more stuff: more stuff}]""" непосредственно в основной файл .swift. Но каждый раз, когда я использую Bundle.main.path(forResource: " nameOfFile", ofType: "json") или URLSession, он полностью терпит неудачу в строке декодирования.

  • Теория 1. Scryfall не использует json, которое соответствует Codable?
  • Теория 2. Моя структура для хранения данных не «улавливает» декодированные данные правильно.

Scryfall API

взлом с помощью Swift> Шпаргалка по кодированию

взлом с помощью Swift> Отправка и получение кодируемых данных с помощью URLSession и SwiftUI

редактировать: перекрестная публикация в Reddit> iOSDev

1 Ответ

0 голосов
/ 13 июля 2020

Вероятно, ваш класс «Ответ» не совсем правильный. Вы можете использовать something line quicktype для создания класса модели.

Вы также можете использовать JSON -Validator для проверки json со своего сайта (https://jsonlint.com), но Я думаю, что с их стороны нет никакой ошибки.

Также взгляните на Обработку ошибок из JSON -Decoder: Обработка ошибок с использованием JSONDecoder в Swift

Без дополнительных деталей , Я больше не могу тебе помочь. Попробуйте опубликовать фрагмент (модель ответа + код), чтобы мы могли проанализировать проблему.

...