将基础和非基础类型序列化为 swift 中的 JSON
Serializing Foundation and non-foundation types to JSON in swift
我正在尝试将两种不同类型的对象序列化为 JSON
,但我只能使用 JSONEncoder
序列化一个对象,使用 JSONSerialization
序列化另一个对象其他.
一个是简单的Int
,我连载如下:
let ticket: [String:Any] = ["ticket": -1]
let ticketJson = try! JSONSerialization.data(withJSONObject: ticket)
let ticketJsonString = String(data: ticketJson, encoding: String.Encoding.utf8)
另一个对象类型是我创建的class,我序列化如下:
let encodedNotification = try! JSONEncoder().encode(notification)
let encodedNotificationJsonString = String(data: encodedNotification, encoding: String.Encoding.utf8)
理想情况下,我会使用以下字典同时序列化两者:
let parameters: [String:Any] = ["ticket": -1, "notification": notification]
这可能吗?如果是这样,如何?我还没弄明白。
谢谢!
将值放在结构中而不是 [String: Any]
。
struct Parameters: Encodable {
let ticket: Int
let notification: Notification
}
let parameters = Parameters(ticket: -1, notification: notification)
let encoded = try JSONEncoder().encode(parameters)
作为规则,避免在 Swift 中使用 Any
。这是一种很难正确使用的类型,并且不能很好地与类型系统配合使用。除了在相当高级的代码中,它主要由于 ObjC-bridging 而出现(例如在 JSONSerialization 中,它是 ObjC NSJSONSerialization 的桥梁)。
我正在尝试将两种不同类型的对象序列化为 JSON
,但我只能使用 JSONEncoder
序列化一个对象,使用 JSONSerialization
序列化另一个对象其他.
一个是简单的Int
,我连载如下:
let ticket: [String:Any] = ["ticket": -1]
let ticketJson = try! JSONSerialization.data(withJSONObject: ticket)
let ticketJsonString = String(data: ticketJson, encoding: String.Encoding.utf8)
另一个对象类型是我创建的class,我序列化如下:
let encodedNotification = try! JSONEncoder().encode(notification)
let encodedNotificationJsonString = String(data: encodedNotification, encoding: String.Encoding.utf8)
理想情况下,我会使用以下字典同时序列化两者:
let parameters: [String:Any] = ["ticket": -1, "notification": notification]
这可能吗?如果是这样,如何?我还没弄明白。
谢谢!
将值放在结构中而不是 [String: Any]
。
struct Parameters: Encodable {
let ticket: Int
let notification: Notification
}
let parameters = Parameters(ticket: -1, notification: notification)
let encoded = try JSONEncoder().encode(parameters)
作为规则,避免在 Swift 中使用 Any
。这是一种很难正确使用的类型,并且不能很好地与类型系统配合使用。除了在相当高级的代码中,它主要由于 ObjC-bridging 而出现(例如在 JSONSerialization 中,它是 ObjC NSJSONSerialization 的桥梁)。