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