我想在 Swift 中表示一个通用的 JSON 对象:
let foo: [String: Any] = [
"foo": 1,
"bar": "baz",
]
但是[String: Any]
编译器建议的类型并不能很好地工作。例如,我无法检查该类型的两个实例是否相等,而这应该可以使用两个 JSON 树。
也不起作用的是使用Codable
机器将该值编码为 JSON 字符串:
let encoded = try JSONEncoder().encode(foo)
这会因错误而爆炸:
fatal error: Dictionary<String, Any> does not conform to Encodable because Any does not conform to Encodable.
我知道我可以引入一个精确的类型,但我追求的是一个通用的 JSON 结构。我什至尝试为通用 JSON 引入特定类型:
enum JSON {
case string(String)
case number(Float)
case object([String:JSON])
case array([JSON])
case bool(Bool)
case null
}
但是在Codable
为这个枚举实现时,我不知道如何实现encode(to:)
,因为键控容器(用于编码对象)需要一个特定的CodingKey
参数,而我不知道如何得到它。
真的不可能创建一个Equatable
通用的 JSON 树并使用它进行编码Codable
吗?