我将尝试在Swift 4中解码以下JSON:
问题在于 JSON 中的最后两个元素(
我的结构看起来像这样:
{
"token":"RdJY3RuB4BuFdq8pL36w",
"permission":"accounts, users",
"timout_in":600,
"issuer": "Some Corp",
"display_name":"John Doe",
"device_id":"uuid824fd3c3-0f69-4ee1-979a-e8ab25558421"
}
问题在于 JSON 中的最后两个元素(
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可能包含动态信息。
谢谢