在 Swift 中解码任意 JSON

HariJustForFun

我正在尝试解码具有以下结构的 JSON 并转换为 Swift 结构对象。

"{\"createdAt\":\"2021-07-20T06:53:05.755Z\",\"extraPayload\":\"32bd7d6691964519\",\"messageID\":\"a5f77d0a27da2e14a78ce4d736590bb3c369d5e5bebd36339553e3b699b82d13\",\"publishedAt\":\"2021-07-20T06:53:05.836655Z\"}"

两个publishedAtmessageID字段是固定的,在JSON任何其他字段可以任意基于特定的用例。在这种情况下,两个字段createdAtextraPayload都是完全可选的,另一种情况可能是appConfig:true等,除了 2 个固定字段。

如何映射到具有以下格式的结构,该结构具有 2 个强制固定字段和使用类型字典捕获的任意部分[String:Any]

public struct MessagePayload {
    /**
     * Message identifier — opaque non-empty string.
     */
    let messageID: String
    
    /**
     * ISO 8601 date indicating a moment when the message was published to the ACN back-end service.
     */
    let publishedAt: String
    
    /**
     * Application-specific fields.
     */
    let messageObject: [String:Any]?
}

我曾尝试使用 Swift Codable,但它不支持 [String:Any]。

布拉德利·麦基

看来JSONSerializationfromFoundation可能更适合您的用例。这会将 JSON 数据直接解码为一种Any类型,然后您可以将其强制转换[String: Any]为访问基础属性。

let decoded = try? JSONSerialization.jsonObject(with: myJsonData, options: []) as? [String: Any]
decoded?["messageID"]
decoded?["publishedAt"]
// ...access other properties as needed

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章