我正在尝试在 Swift 4 中解码以下 JSON:
{
"token":"RdJY3RuB4BuFdq8pL36w",
"permission":"accounts, users",
"timout_in":600,
"issuer": "Some Corp",
"display_name":"John Doe",
"device_id":"uuid824fd3c3-0f69-4ee1-979a-e8ab25558421"
}
问题是,JSON 中的最后 2 个元素(display_name
和device_id
)可能存在也可能不存在,或者元素可能被命名为完全不同但仍然未知的东西,即"fred": "worker", "hours" : 8
所以我想要实现的是解码已知的内容,即,token
和任何其他元素(等)将它们放入字典中。permission
timeout_in
issuer
display_name
device_id
我的结构如下所示:
struct AccessInfo : Decodable
{
let token: String
let permission: [String]
let timeout: Int
let issuer: String
let additionalData: [String: Any]
private enum CodingKeys: String, CodingKey
{
case token
case permission
case timeout = "timeout_in"
case issuer
}
public init(from decoder: Decoder) throws
{
let container = try decoder.container(keyedBy: CodingKeys.self)
token = container.decode(String.self, forKey: .token)
permission = try container.decodeIfPresent(String.self, forKey: .permission).components(separatedBy: ",")
timeout = try container.decode(Int.self, forKey: . timeout)
issuer = container.decode(String.self, forKey: .issuer)
// This is where I'm stuck, how do I add the remaining
// unknown JSON elements into additionalData?
}
}
// Calling code, breviated for clarity
let decoder = JSONDecoder()
let accessInfo = try decoder.decode(AccessInfo.self, from: data!)
如果有人可以提供一些指导,那么能够解码 JSON 也可以包含动态信息的已知结构的一部分就是我所处的位置。
谢谢