【问题标题】:Issue in Parsing JSON object from CoreData从 CoreData 解析 JSON 对象的问题
【发布时间】:2018-07-18 20:58:34
【问题描述】:

我将一个 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_numberfirst_Name 的单个值...?

【问题讨论】:

    标签: ios json swift core-data


    【解决方案1】:

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

    【讨论】:

    • 你是对的@Johan Kool。当然也推荐。但在我的项目场景中,我想将一些数据作为 json 对象存储到 coredata 中。这就是为什么我正在研究这种方法。希望你能帮忙...:)
    • 正如约翰所说,最好将每条数据存储在自己的字段中。或者您将做更多的工作来读取数据,并且无法通过这些字段搜索核心数据中的数据。如果您确实必须以这种方式存储它,则需要将该 JSON 字符串转换回字典或模型对象,然后您可以访问这些值
    【解决方案2】:

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

    【讨论】:

    • 但是@Suganya Marlin 我已经保存到 coredata 中,当我检索时,我得到了这个...... { "user1" : { "mobile_number" : "567567567", "first_Name" : "iopiopi", } } 但是如何从这些我无法弄清楚的数据中提取......
    • 使用上面的代码保存..然后你可以很容易地检索它...这是在CoreData中保存元素的正确方法
    • 你说得对。但是在我的项目场景中,我必须以另一种方式来做...... :) 用上面@Scriptable 的话来说,“......如果你真的必须以这种方式存储它,你需要将该 JSON 字符串转换回字典或模型对象,然后您可以访问这些值..”您对此有任何想法...?
    • 我已经给出了将字符串转换为 json 对象的代码
    猜你喜欢
    • 2014-08-23
    • 2017-12-10
    • 2013-02-16
    • 2021-04-15
    • 2020-12-08
    • 1970-01-01
    • 2014-01-21
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多