Swift 2:将 JSON 原生序列化为核心数据模型对象

Posted

技术标签:

【中文标题】Swift 2:将 JSON 原生序列化为核心数据模型对象【英文标题】:Swift 2: Natively serialize JSON to Core Data Model Objects 【发布时间】:2015-11-28 04:56:18 【问题描述】:

我想来回将 JSON 序列化为核心数据模型对象。我正在从 RestKIT 切换到 Alamofire 和 Swifty JSON。我知道有提供该功能的库,但我想知道如何在本地实现它?

以下是核心数据设置:

Event+CoreDataProperties.swift

import Foundation
import CoreData

extension Event 

    @NSManaged var id: NSNumber?
    @NSManaged var name: String?
    @NSManaged var realRame: String?
    @NSManaged var notes: NSSet?


Event.swift

import Foundation
import CoreData

class Event: NSManagedObject 
// Insert code here to add functionality to your managed object subclass

Notes+CoreDataProperties.swift

import Foundation
import CoreData

extension Notes 

    @NSManaged var id: NSNumber?
    @NSManaged var name: String?
    @NSManaged var event: Event?


Notes.swift

导入基础 导入核心数据

类注释:NSManagedObject // 在此处插入代码以向托管对象子类添加功能

以下是收到的 JSON:


    "id": "5555",
    "name": "Superman",
    "realName": "Clark Kent",
    "notes": [
        
            "id": "2",
            "name": "Order Flowers"
        ,
        
            "id": "3",
            "name": "Pick up Laundry"
        
        
            "id": "4",
            "name": "Get Chinese Food"
        ,
    ]

获取 JSON 的代码:

Alamofire.request(fetchData(param)).responseJSON  (response) in

        switch response.result 
        case .Success:
            if let value = response.result.value 
                let json = JSON(value)
            
        case .Failure(let error):
            print("Request failed with error: \(error)")
        
    

问题:我不知道从这里去哪里。 NSJSONSerialization 似乎想要NSData 格式的数据。

代码示例将不胜感激。

【问题讨论】:

如果您收到 JSON 格式的响应,那么您可以直接将其存储在 NSMutableDictionary 中并使用键值对访问值。为什么需要使用 NSJSONSerialization? 我正在使用 SwiftyJSON 将 JSON 转换为对象。我如何返回单词? 【参考方案1】:

添加新类 DBManager:

class DBManager: NSObject 
var managedObjectContext:NSManagedObjectContext!
var managedObjectModel:NSManagedObjectModel!

func insertData(jsonObj: AnyObject)  
            let entity =  NSEntityDescription.entity(forEntityName: "Event",
                                                     in:managedObjectContext)
            let obj = NSManagedObject(entity: entity!,
                                           insertInto: managedObjectContext)

            obj.setValue(String((jsonObj.value(forKey: "id"))!)  , forKey: "id")

....

继续设置其他属性的值。

在 AppDelegate 中声明这个变量:

var objDb = DBManager()

添加这个

switch response.result 
        case .Success:
            if let value = response.result.value 
                let json = JSON(value)

                let anyObjects: AnyObject = json as! AnyObject
                let appDelegate = UIApplication.shared().delegate as! AppDelegate
                appDelegate.objDb.insertData(jsonObj: anyObjects)
            
        case .Failure(let error):
            print("Request failed with error: \(error)")
            

【讨论】:

以上是关于Swift 2:将 JSON 原生序列化为核心数据模型对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 Codable 序列化为 JSON 时的 Swift 字符串转义

轻松将对象序列化为 JSON

Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON

swift 3中的ResponseCollectionSerializable

将 dataGridView 序列化为 JSON

使用 Python >= 2.7 将嵌套的命名元组序列化为 JSON