【发布时间】:2017-12-02 01:20:43
【问题描述】:
我正在尝试在 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 也可能包含动态信息的已知结构的一部分就是我所处的位置。
谢谢
【问题讨论】:
-
您的 JSON 无效。请提供真实 JSON。
标签: json swift dynamic decodable