#arrays #json #swift #dictionary
#массивы #json #swift #dictionary
Вопрос:
У меня есть массив словарей, который считывается из файла JSON, как показано ниже. Я хотел бы сохранить это значение (JsonResult) в переменной класса, чтобы я мог использовать его для заполнения табличного представления. Однако я не совсем понимаю, как сохранить это значение.
Вот как я получаю свой массив словарей (JsonResult):
if let path = Bundle.main.path(forResource: filename, ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as! [String:Any]
self.tableData = jsonResult // WHAT GOES HERE?
} catch {
// handle error
}
}
И это моя переменная класса, в которую я хочу сохранить свой массив словарей:
var tableData = [Dictionary<String, String>]()
Как я могу правильно сохранить JsonResult в tableData? Я не хочу использовать структуру, поскольку структура словарей может меняться.
Ответ №1:
Вы заявляете, что JSON является массивом словаря, но вы приводите результат JSONSerialization.jsonObject
только к словарю. Поскольку вы, похоже, ожидаете массив словаря как со строковыми ключами, так и со значениями, приведите результат соответствующим образом. Но делайте это безопасно. Никогда не используйте !
при работе с JSON.
if let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? [[String:String]] {
self.tableData = jsonResult
} else {
// Error - unexpected JSON result
}
Предполагается, что вам нужен верхний уровень результата JSON. Если на самом деле jsonResult
должен быть словарь, и этот словарь верхнего уровня имеет ключ к фактическому массиву словарей, который вы хотите, тогда вам нужно соответствующим образом исправить код.