Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从CoreData解析JSON对象时出现问题_Ios_Json_Swift_Core Data - Fatal编程技术网

Ios 从CoreData解析JSON对象时出现问题

Ios 从CoreData解析JSON对象时出现问题,ios,json,swift,core-data,Ios,Json,Swift,Core Data,我将JSON对象转换为字符串,并将其存储到CoreData。但是在检索JSON对象之后,如何解析单个元素并获取每个元素,我无法理解 这就是我获取json对象的方式: let mobileNumber = mobileNumberTextfield.text let firstName = firstNameTextField.text let jsonObject: [String: [String:Any]] = [ "user1": [ "mobile_number

我将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)
}
for result in  newProductDetails {
    if let prodID = result.value(forKey: "address") as? String {
        print(prodID)

    }
}
打印
str
将提供:

{
  "user1" : {
    "mobile_number" : "567567567",
    "first_Name" : "iopiopi",
  }
}
我将它按原样存储到
coredata
中,因此当我检索它时,我会以与上面相同的格式将其返回。但是我怎么才能检索出我不知道的单个元素供以后使用呢

如果我把它弄到像这样的东西

if let data = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted),
    let str = String(data: data, encoding: .utf8) {
    print(str)
}
for result in  newProductDetails {
    if let prodID = result.value(forKey: "address") as? String {
        print(prodID)

    }
}
并对addDetails.enumerated()中的(键、值)执行一个
&打印值,它会给出这个

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

但是如何从中提取
mobile\u number
&
first\u Name
的单个值…?

您正在存储数据(
NSData
从编码JSON的字符串中获得),并从CoreData中获取相同的数据。这意味着您必须再次解析
NSData
实例中的JSON。往返于JSON/NSData之间没有什么意义。您可能只想创建一个用户实体,并将手机号码和名字直接存储到CoreData中。

您正在存储数据(
NSData
,从编码JSON的字符串中获取),并从CoreData中获取相同的数据。这意味着您必须再次解析
NSData
实例中的JSON。往返于JSON/NSData之间没有什么意义。您可能只想创建一个用户实体,并将手机号码和名字直接存储到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)
                    }
                 }
            }
如果让reposArray:AnyObject=json[“user1”]as?国家统计局词典{
self.mbleNo=reposArray[“移动电话号码”]作为?字符串
让appDelegate=UIApplication.shared.delegate为!appDelegate
如果可用(iOS 10.0,*){
让managedObjectContext=appDelegate.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“字段”)
让entityDescription=NSEntityDescription.entity(在:managedObjectContext中,名为“字段”)
将titleInfo=NSManagedObject(实体:entityDescription!,插入:managedObjectContext)设为?字段
titleInfo?.setValue(self.mbleNo,forKey:“手机号码”)
做{
尝试titleInfo?.managedObjectContext?.save()
}
抓住{
打印(错误)
}
}
}

将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)
                    }
                 }
            }
如果让reposArray:AnyObject=json[“user1”]as?国家统计局词典{
self.mbleNo=reposArray[“移动电话号码”]作为?字符串
让appDelegate=UIApplication.shared.delegate为!appDelegate
如果可用(iOS 10.0,*){
让managedObjectContext=appDelegate.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“字段”)
让entityDescription=NSEntityDescription.entity(在:managedObjectContext中,名为“字段”)
将titleInfo=NSManagedObject(实体:entityDescription!,插入:managedObjectContext)设为?字段
titleInfo?.setValue(self.mbleNo,forKey:“手机号码”)
做{
尝试titleInfo?.managedObjectContext?.save()
}
抓住{
打印(错误)
}
}
}

你说得对@Johan Kool。当然,这也是推荐的。但在我的项目场景中,我想将一些数据作为json对象存储到coredata中。这就是为什么我要研究这种方法。希望你能帮上忙……:)正如约翰所说,最好将每一条数据存储在自己的字段中。或者,您将要做更多的工作来读取数据,并且无法通过这些字段搜索核心数据中的数据。如果您确实必须以这种方式存储它,则需要将该JSON字符串转换回字典或模型对象,然后您可以访问值you are right@Johan Kool。当然,这也是推荐的。但在我的项目场景中,我想将一些数据作为json对象存储到coredata中。这就是为什么我要研究这种方法。希望你能帮上忙……:)正如约翰所说,最好将每一条数据存储在自己的字段中。或者,您将要做更多的工作来读取数据,并且无法通过这些字段搜索核心数据中的数据。如果您真的必须以这种方式存储它,您需要将JSON字符串转换回字典或模型对象,然后您可以访问值,但@Suganya Marlin我已经保存到coredata中,当我检索时,我得到了这个<代码>{“user1”:{“mobile_number”:“567567567”,“first_Name”:“IOPI”,}}但是如何从这些数据中提取我无法理解的数据…使用上面的代码保存..然后你可以轻松地检索它…这是保存CoreDatau中元素的正确方法。但在我的项目场景中,我必须以另一种方式来做…:)用上面@Scriptable的话来说,“……如果您真的必须以这种方式存储它,那么您需要将JSON字符串转换回字典或模型对象,然后您可以访问这些值……”你对此有什么想法吗…?我已经给出了将字符串转换为json objectLet的代码。但是@Suganya Marlin我已经保存到coredata中,当我检索时,我得到了这个<代码>{“user1”:{“mobile_number”:“567567567”,“first_Name”:“IOPI”,}}但如何从这些数据中提取我无法理解的数据…使用上述代码保存