сохранение данных json в coredata в swift

#json #swift

#json #swift

Вопрос:

Я пытаюсь сохранить данные json, которые присутствуют в моем пакете приложений. Но вместо сохранения всех данных он сохраняет только одни данные

    func getDignosysListFromJson() {
       let coreData = CoreDataStack()
             let managedObjectContext = coreData.persistentContainer.viewContext
             let dignose = Dignose(context: managedObjectContext)
       let jsonPath = Bundle.main.path(forResource: "dignosys", ofType: "json")
       let jsonUrl = URL(fileURLWithPath: jsonPath!)
       do {
           let data = try Data(contentsOf: jsonUrl)
           let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
           if let newResult = jsonResult as? Array<Dictionary<String, Any>>{
               for i in newResult{
                   let newName = i["dx description"] as! String
                   print(newName)
                   
                   dignose.name = newName
                   dignose.date = "29 Dec 2020"
                  
                   
               }
               
               coreData.saveContext()
               

           }
       } catch {
           print("")
       }
   }

 

Моя структура json:-

 [
{"dx type":"what is foot issue","dx description":"Hereditary motor and sensory neuropathy"},
{"dx type":"what is foot issue","dx description":"Multiple sclerosis"},
{"dx type":"use as secondary when only have issue one side","dx description":"gait instability”}
]
 

Ответ №1:

Переместите строку

 let dignose = Dignose(context: managedObjectContext)
 

в цикл

 for i in newResult {
    let dignose = Dignose(context: managedObjectContext)
    let newName = i["dx description"] as! String
    print(newName)
   
    dignose.name = newName
    dignose.date = "29 Dec 2020"
}
 

для получения нового экземпляра на каждой итерации.


Код содержит несколько сомнительных практик. Я рекомендую это

 func getDignosysListFromJson() {
   let coreData = CoreDataStack()
   let managedObjectContext = coreData.persistentContainer.viewContext
        
   let jsonUrl = Bundle.main.url(forResource: "dignosys", withExtension: "json")!
   do {
       let data = try Data(contentsOf: jsonUrl)
       if let jsonResult = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] {
           for anItem in jsonResult {
               let dignose = Dignose(context: managedObjectContext)
               let newName = anItem["dx description"] as! String
               print(newName)
               
               dignose.name = newName
               dignose.date = "29 Dec 2020"
           }
           coreData.saveContext()
       }
   } catch {
       print(error)
   }
}