假设我必须将此数据发送到服务器:

struct Event: Codable {
    let title: String
    let params: [String:Any]? //Not allowed
}

因此,例如,这些事件可能看起来像以下任何一个:

let event = Event(title: "cat was pet", params:["age": 7.2])
let event = Event(title: "cat purred", params:["time": 9])
let event = Event(title: "cat drank", params:["water": "salty", "amount": 3.3])

我需要能够将任意数量的键/值对作为params发送到事件.Codable能做到这一点吗?如果不是,我将如何将params编码为json字符串?

推荐答案

如果所有类型都符合Codable,Codable就是神奇的,但在您的情况下,我建议使用传统的JSONSerialization.添加计算(computed)属性dictionaryRepresentation

struct Event: {
    let title: String
    let params: [String:Any]

    var dictionaryRepresentation: [String:Any] {
        return ["title":title,"params":params] 
    }
}

然后对事件进行编码

let data = try JSONSerialization.data(withJSONObject: event.dictionaryRepresentation)

这比强迫Any变成Codable要便宜/麻烦(无意冒犯,Rob).

Json相关问答推荐

使用SQL查询从SON中查找第n个密钥对值

带有PowerShell内核的NewtonSoft json.Net的奇怪行为

用于参考的Jolt变换

使用JQ将JSON输出转换为CSV复杂 struct

bash用jq获取第二条JSON记录

json 字符串到 Postgres 14 中的表视图

未知的META规范,无法验证.[规范v1.0.1]

APIM 生成 JsonArray 到 EventHub

从 oracle 数据库中的 json blob 打印值

修改 boost::json::object 中的值

jolt 通配符如何用于 RHS?

如何在循环中传递列表(会话(字符串属性))以在 Gatling Scala 中创建批量 Json 请求

判断 JSON 中的对象,而不是条件中提到的对象

Rails 控制器无需编码即可渲染 json

在 rust 中从 API 反序列化 serde_json

缺少所需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter

如何从 rails 中的 respond_to 方法生成 json?

JSON.NET 中特定对象的自定义转换

如何安装 json gem - 无法构建 gem 原生扩展(mac 10.10)

python追加到json对象中的数组