简体   繁体   English

在 swift 的 coredata 中保存 json 数据

[英]saving json data in coredata in swift

I am trying to save json data which is present in my app bundle.我正在尝试保存我的应用程序包中存在的 json 数据。 But instead of saving all data it is saving only one data但不是保存所有数据,而是只保存一个数据

   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("")
       }
   }

My json structure is:-我的 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”}
]

Move the line移动线

let dignose = Dignose(context: managedObjectContext)

into the loop进入循环

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"
}

to get a new instance in each iteration.在每次迭代中获取一个新实例。


The code contains a few questionable practices.该代码包含一些有问题的做法。 I recommend this我推荐这个

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)
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM