从Coredata解析JSON对象的问题



我将JSON对象转换为字符串,并将其存储到Coredata。但是如何解析单个元素并在检索我无法弄清的JSON对象之后获取每个元素....

这就是我得到json对象的方式:

let mobileNumber = mobileNumberTextfield.text
let firstName = firstNameTextField.text
let jsonObject: [String: [String:Any]] = [
    "user1": [
        "mobile_number": mobileNumber,
        "first_Name": firstName,
    ]
]

我像这样打印json字符串...

if let data = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted),
    let str = String(data: data, encoding: .utf8) {
    print(str)
}

打印str给出:

{
  "user1" : {
    "mobile_number" : "567567567",
    "first_Name" : "iopiopi",
  }
}

我正在将其与coredata一样存储,因此,当我检索它时,我以与上面的格式相同的格式将其恢复。但是,我该如何检索单个元素以供以后使用我不知道的使用。

如果我把它拿到类似的东西...

for result in  newProductDetails {
    if let prodID = result.value(forKey: "address") as? String {
        print(prodID)
    }
}

并执行for (key, value) in addDetails.enumerated()&打印值,它给出了..

 data: {
    address = "{
n  "user1" : {
n    "mobile_number" : "1236594525",
n    "first_Name" : "ghj"
n  
}
n
}";
})

但是如何提取mobile_number& first_Name ...?

您正在存储数据(从编码JSON的字符串获得的NSData(并从Coredata恢复了相同的数据。这意味着您必须再次在该NSData实例中解析JSON。往返JSON/NSDATA和BACK的旅程毫无意义。您可能只想创建一个用户实体并将手机号码存储在Coredata中。

将json字符串转换为字典:

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
         do {
             return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
          } catch {
             print(error.localizedDescription)
          }
    }
    return nil
}
let str = "{"name":"James"}"
let dict = convertToDictionary(text: str)

您应该在Coredata中这样保存:

          if let reposArray: AnyObject = json["user1"] as? NSDictionary {
                self.mbleNo = reposArray["mobile_number"] as? String
                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                if #available(iOS 10.0, *) {
                    let managedObjectContext = appDelegate.persistentContainer.viewContext
                    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Fields")
                    let entityDescription = NSEntityDescription.entity(forEntityName: "Fields", in:managedObjectContext)
                    let titleInfo = NSManagedObject(entity: entityDescription!, insertInto: managedObjectContext) as? Fields
                    titleInfo?.setValue(self.mbleNo, forKey: "mobile_number")
                    do {
                        try titleInfo?.managedObjectContext?.save()
                    }
                    catch {
                        print(error)
                    }
                 }
            }

相关内容

最新更新