Преобразование строки в массив json с базой данных sqlite - PullRequest
0 голосов
/ 15 марта 2019

Здравствуйте, я сохраняю живые данные API в таблице sqlite, и после этого я снова получаю, когда пользователь включает интернет. Я успешно получаю данные в строке, но затем я хочу преобразовать эти данные в массив json, как показано ниже

Ожидаемый вывод

[{"properties_id":"1234","house_number":"1"},{"properties_id":"1234","house_number":"2"}]

Я пытался преобразовать, я покажу вам код, который я пытался, но я получаю неправильный вывод, как показано ниже

OutPut, который я получаю

[["17", "1", "1234"], ["18", "2", "1234"]]

Вот мой код

var mainLocalArray = [Any]()

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! ProjectsTableViewCell
            let name = propertyLocalData[indexPath.row].house_number
            cell.lblProjectsName.text = "\(name!)"
            cell.viewVisitView.backgroundColor = UIColor(red: 86/255, green: 35/255, blue: 127/255, alpha: 1)
            let id = propertyLocalData[indexPath.row].id
            let pro_ID  = propertyLocalData[indexPath.row].proID
            let housnumber = propertyLocalData[indexPath.row].house_number
            let arrayLocal = ["\(id)", "\(pro_ID)", housnumber!] as [Any]
            print(arrayLocal)
            self.mainLocalArray.append(arrayLocal)
            print(mainLocalArray)
            return cell
    }

Я создаю массив значений, которые я получаю из базы данных и добавляю в другие mainlocalarray, но как преобразовать в массив json нев состоянии понять, пожалуйста, помогите кому-нибудь.

1 Ответ

1 голос
/ 15 марта 2019

cellForRowAt - абсолютно неправильное место для преобразования данных.

Простое решение с протоколом Encodable

  • Удалить

    var mainLocalArray = [Any]()
    
    
    let arrayLocal = ["\(id)", "\(pro_ID)", housnumber!] as [Any]
    print(arrayLocal)
    self.mainLocalArray.append(arrayLocal)
    print(mainLocalArray)
    

  • В вашей структуре (тип propertyLocalData) добавьте Encodable и CodingKeys

    struct MyStruct : Encodable {
    
    ...
    
        private enum CodingKeys : String, CodingKey { case id = "properties_id", house_number }
    
    ... }
    
  • В методе ( не в cellForRow) кодировать массив источника данных

    do {
       let jsonData = try JSONEncoder().encode(propertyLocalData)
       let jsonString = String(data: jsonData, encoding: .utf8)!
       print(jsonString)
    } catch { print(error) }
    

PS: Drop SwiftyJSON.

...