首页 > 解决方案 > 快速将基础和非基础类型序列化为 JSON

问题描述

我正在尝试将两种不同类型的对象序列化为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)

另一种对象类型是我创建的一个类,我将其序列化如下:

let encodedNotification = try! JSONEncoder().encode(notification)
let encodedNotificationJsonString = String(data: encodedNotification, encoding: String.Encoding.utf8)

理想情况下,我会使用以下字典同时序列化两者:

let parameters: [String:Any] = ["ticket": -1, "notification": notification]

这可能吗?如果是这样,怎么做?我一直无法弄清楚。

谢谢!

标签: iosjsonswiftnsjsonserializationjsonencoder

解决方案


将值放在 struct 而不是[String: Any].

struct Parameters: Encodable {
    let ticket: Int
    let notification: Notification
}

let parameters = Parameters(ticket: -1, notification: notification)

let encoded = try JSONEncoder().encode(parameters)

通常,避免Any在 Swift 中使用。这是一种很难正确使用的类型,并且不能很好地与类型系统配合使用。除了在相当高级的代码中,它主要是由于 ObjC 桥接而出现的(例如在 JSONSerialization 中,它是 ObjC NSJSONSerialization 的桥梁)。


推荐阅读