SwiftyJSON:将对象转换为JSON

10
我知道使用SwiftyJSON可以将JSON对象转换为Swift。但是,SwiftyJSON允许你返回吗?即,将带有关系的NSManagedObject转换成JSON格式?
请给出示例。

1
SwiftyJSON 是一个简单的 JSON 序列化和反序列化工具。你需要确保数据格式正确。至于关联性,你需要准备好将其序列化的数据(例如将其转换为字典或其他格式)。你现在询问的是 Core Data 和 SwiftyJSON 的紧密集成,但实际上二者并没有直接的集成方式。 - Daniel Shin
@user1107173 你如何从 JSON 初始化托管对象?这是不可行的... - JAHelia
1
@JAHelia 我认为你不能这样做。你需要将其从JSON转换,并手动进行映射。 - user1107173
1个回答

5

您不能这样做,因为 SwiftyJSON 不是为此而设计的。SwiftyJSON 只是利用 Swift 的特性来更好地解析 JSON,与 objective-c 相比没有提供任何序列化成 JSON 的价值。

对于您的目的,您需要从 NSManagedObject 对象创建字典/数组。然后只需使用类似以下代码的带有 JSON 序列化器的 Alamofire

let parameters = event.toJSON() // create Dictionary from NSManagedObject

Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON)

将数据序列化为 JSON 字典 - 如果您有两个 NSManagedObject 的子类 - EventActivity,其中 EventActivity 之间有一对多关系,我会这样做:

extension Event {
    func toJSON() -> Dictionary<String, AnyObject> {
        return [
            "id": self.id,
            "name": self.name,
            "startDate": self.startDate.GMTFormatString,
            "endDate": self.endDate.GMTFormatString,
            "activities": self.activities.map({ $0.toJSON() })   
        ]
    }
}

extension Activity {
    func toJSON() -> Dictionary<String, AnyObject> {
        return [
            "id": self.id,
            "name": self.name
        ]
    }
}

谢谢。对于关系,这将如何工作?例如,如果我有一个名为“事件”的实体,它与“活动”实体具有一对多的关系。事件将拥有一组活动。 - user1107173
1
我可能会使用一个序列化方法,实现扩展类并返回字典。请查看更新的帖子。 - Pavel Smejkal
另外,所有的属性都要进行强制解包。返回["id": self.id!]。如果其中一个值为nil,这会导致崩溃吗? - user1107173
1
是的,它会。你不应该包括那些可能为空的值,而是输入一些默认值。 - Pavel Smejkal
1
我猜你需要将NSDate保存为数字,所以我会选择date.timeIntervarSince1970或类似的东西。这取决于你在API端点上需要日期的方式。在某些地方,你需要按照某个标准发送格式化日期(Google API使用RFC 3339)。 - Pavel Smejkal
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接