【问题标题】:SwiftyJSON: Converting Objects to JSONSwiftyJSON:将对象转换为 JSON
【发布时间】:2016-03-02 06:41:37
【问题描述】:

我知道使用 SwiftyJSON 您可以将对象从 JSON 转换为 Swift

SwiftyJSON 是否允许您返回?即使用 NSManagedObjects 与关系并将其转换为 JSON?

请举例。

【问题讨论】:

  • SwiftyJSON 是简单的 json 序列化器/反序列化器。您需要确保您拥有正确的数据。至于关系,你的工作是让它为序列化做好准备(即,使它成为字典或某种形式)。您要问的是 Core Data 和 SwiftyJSON 之间的紧密集成,但实际上并没有。
  • @user1107173 你如何设法从 JSON 初始化托管对象?这是可撤销的......
  • @JAHelia 我不认为你可以。您已将其从 JSON 转换并手动进行映射。

标签: swift nsmanagedobject swifty-json


【解决方案1】:

你不能那样做,这不是 SwiftyJSON 的用途。 SwiftyJSON 只是利用了 Swift 的特性来比 Objective-c 更好地解析 JSON,它不会为 JSON 带来任何序列化的价值。

出于您的目的,您必须从您的 NSManagedObject 对象创建字典/数组。然后将 Alamofire 与 JSON 序列化程序一起使用,如下所示:

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
        ]
    }
}

【讨论】:

  • 谢谢。这对人际关系有何影响。 IE。如果我有一个名为“事件”的实体,它与“活动”实体有一对多关系。事件将有一组活动。
  • 我可能会使用一种序列化方法实现扩展,以便在字典中返回两个类。查看更新后的帖子
  • 另外,我必须强制解开所有属性。返回[“id”:self.id!]。如果其中一个值为 nil 是否会导致崩溃?
  • 是的,它会的。你不应该包含可以为 nil 的值或输入一些默认值
  • 我猜你需要将 NSDate 保存为数字,所以我会选择 date.timeIntervarSince1970 或类似的东西。取决于您如何需要 API 端点上的日期。您需要根据某些标准发送格式化日期的地方(Google API 使用 RFC 3339)
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多