Как сохранить массив словарей в переменную класса?

#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 должен быть словарь, и этот словарь верхнего уровня имеет ключ к фактическому массиву словарей, который вы хотите, тогда вам нужно соответствующим образом исправить код.