Декодирование [[String]] с использованием JSONDecoder? - PullRequest
0 голосов
/ 09 декабря 2018

Я отсутствовал в Swift в течение последних 12 месяцев, но только что вернулся к приложению, которое ранее работало (Swift 4.0), но теперь кажется, что происходит сбой, и я не уверен, почему.

МойПроблема связана с JSONDecoder и попыткой декодировать массив массивов строк.

var tryingToDecode: [[String]]

Используемый мной JSON имеет следующий формат (см. таблицу ниже) для фактических данныхПожалуйста, используйте следующую ссылку.

JASON DATA

enter image description here

Код, который я использую (см. ниже) self.requestData - это данные JSON, которые я использую, которые работают при декодировании всех моих других данных, просто не работают с [[String]]

func TEST_decodeReceivedJSON() {
    let decoder = JSONDecoder()
    do {
        let array = try decoder.decode(DataStruct.self, from: self.requestData)
        print(array)
    } catch {
        print("Error")
    }
}

Структура, которую я использую для декодирования:

struct DataStruct: Codable {
var data: [[String]]

}

Это просто тестовый код, но когда я его компилирую, я всегда получаю сообщение об ошибке catch.Я пробовал искать в Интернете, но не могу найти подходящих примеров.Странно то, что до Xcode 10 это работало, его даже приняли в App Store.Теперь несколько пользователей сообщили мне, что что-то не работает, и это действительно так, похоже, это связано с этим конкретным разделом, где [[String]] декодируется с использованием DataStruct.

Anyпомощь или указатели будут очень признательны.

[EDIT 001] Добавлена ​​ссылка на данные JSON, код ниже показывает минимальный пример, меня особенно интересует, как я должен бытьдоступ к [[String]] - массиву массивов строк.Я пытаюсь убедиться, как это работало раньше, есть ли что-то не так с тем, как я пытаюсь декодировать JSON (возможно, обновление / изменение Swift), или есть проблема с JSONDecoder.

[РЕДАКТИРОВАТЬ 002] Решением было [[String?]], И проблема действительно была в JSON, вы просто не сможете увидеть это в текстовой метке необработанных данных, если вы посмотрите на табличное представление под вамиясно видно, что Элемент 10 имеет значение «ноль», и, как следствие, для кода требуется дополнительная строка.

enter image description here

1 Ответ

0 голосов
/ 09 декабря 2018

Проблема не в JSONDecoder, проблема в ваших данных JSON.

Когда я проверял ваш код, я получаю следующую ошибку:

valueNotFound(Swift.String, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: «data», intValue: nil), _JSONKey (stringValue: «Индекс 11», intValue: 11), _JSONKey (stringValue: «Индекс 10» »,intValue: 10)], debugDescription: «Ожидаемая строка, но вместо нее найдено нулевое значение.», underError: nil))

В вашем коде вы ожидаете строку, но когда я проверил ваши данные JSON, она содержитnull значений, и это, очевидно, нарушит написанный код.Чтобы решить эту проблему, все, что вам нужно сделать, это изменить определение модели, чтобы принимать значения null/nil:

struct DataStruct: Codable {
    var data: [[String?]]
}
...