Как прочитать значение basicError из DecodingError.Context при декодировании JSON - PullRequest
0 голосов
/ 16 мая 2019

Я анализирую 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.

Расположение:

Подробнее:

Ошибка, которая являетсябросили предлагает больше не инфИ еще я знаю, что он есть внутри основного элемента.Как мне получить эту информацию?

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