Я анализирую JSON, используя JSONDecoder().decode
.JSON предоставляется пользователем и может иметь много синтаксических ошибок, которые необходимо сообщить пользователю как можно более полезно.
Я могу поймать исключение DecodingError.dataCorrupted
с параметром Context
.Внутри этого есть underlyingError : Error?
член, но я не могу найти тип для приведения этого базовогоError для получения более подробной информации.
Вот краткое изложение моей первой попытки с перехватомall:
let decoder = JSONDecoder()
do {
let jsonData = try Data(contentsOf: jsonFile)
let gameContent = try decoder.decode(GameContent.self, from: jsonData)
// ... on success
} catch {
reasonDownloadFailed = "Failed to parse JSON data: \(error)"
}
Это пример ошибки в следующих строках:
Не удалось проанализировать данные JSON: dataCorrupted (Swift.DecodingError.Context (codingPath: [], debugDescription: «Данные недопустимы в формате JSON.», UnderError: Необязательный (Ошибка Domain = NSCocoaErrorDomain Code = 3840 «Неожиданный конец файла при разборе массива.» UserInfo = {NSDebugDescription = Неожиданный конец файла при разборе массива.})))
Теперь я хотел бы извлечь дополнительную деталь, которую я пытаюсь сделать следующим образом:
let decoder = JSONDecoder()
do {
let jsonData = try Data(contentsOf: jsonFile)
let gameContent = try decoder.decode(GameContent.self, from: jsonData)
// ... on success
} catch DecodingError.dataCorrupted(let context) {
reasonDownloadFailed =
"""
Failed to parse JSON data:
\(context.debugDescription)
Location: \(context.codingPath.map{$0.stringValue}.joined(separator:", "))
More detail: (would be nice to have something here)
"""
}
Это дает мне только это:
Ошибка загрузки причины: Не удалось проанализировать данные JSON: Указанные данные недопустимы. JSON.
Расположение:
Подробнее:
Ошибка, которая являетсябросили предлагает больше не инфИ еще я знаю, что он есть внутри основного элемента.Как мне получить эту информацию?