Я пытаюсь декодировать следующий JSON в Swift 4:
{
"token":"RdJY3RuB4BuFdq8pL36w",
"permission":"accounts, users",
"timout_in":600,
"issuer": "Some Corp",
"display_name":"John Doe",
"device_id":"uuid824fd3c3-0f69-4ee1-979a-e8ab25558421"
}
Проблема в том, что последние 2 элемента (display_name
и device_id
) в JSON могут существовать или не существовать, или элементы могут быть названы как-то совершенно по-другому, но все же неизвестно, т.е. "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 также может содержать динамическую информацию, - вот где я нахожусь, если кто-нибудь может дать какое-то руководство.
Спасибо