ios - 快速将基础和非基础类型序列化为 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]
这可能吗?如果是这样,怎么做?我一直无法弄清楚。
谢谢!
解决方案
将值放在 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 的桥梁)。
推荐阅读
- pandas - 将不具有相同列的 pandas 数据帧列表合并到一个 pandas 数据帧
- xcode - Applescript Xcode,我需要读取文件并在标签上不断显示更改
- javascript - Angular 2+ .将每个表格单元格绑定到数组
- web-services - docker swarm - 性能瓶颈
- python - 如何在基于 Flask 的网站上正确显示终端输出?
- ruby-on-rails - NameError:sidekiq 工作人员在生产中的未初始化常量,但在开发中工作
- java - Java如何以有效的方式生成属性并将其分配给对象?
- css - 如何保持单击 Primefaces 命令按钮时显示的底部边框颜色?
- c# - 不存在 OPOS 驱动程序的打印机
- python - 多处理目标在父进程中按顺序运行