我正在尝试使用动态密钥解码嵌套的json,但是找不到解决方案。 这是我的json:
{
"available_channels": {
"1000": {
"creation_date": "1111222",
"category_id": "9"
},
"1001": {
"creation_date": "222333",
"category_id": "10"
}
}
如您所见,“ 1000”和“ 1001”是动态的。
我正在使用的模型:
struct StreamsData: Codable{
let availableChannels: AvailableChannels
}
struct AvailableChannels: Codable{
let channels: [String: Channel]
}
struct Channel: Codable{
let creationDate: String
let categoryId: String
}
“ StreamsData”是根对象
“ AvailableChannels”是包含所有通道对象的对象
“频道”频道模型
解码json:
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let streams = try decoder.decode(StreamsData.self, from: data)
使用此代码,我会遇到此错误:
CodingKeys(stringValue:“ availableChannels”,intValue:nil) -debugDescription:“与键CodingKeys(stringValue:\“ channels \”,intValue:nil)(\“ channels \”)没有关联的值。”
问题很明显,因为声明“ AvailableChannels”具有“ channel”属性,因此解码器试图查找“ channels”作为包含“ creation_date”的对象的键。
谢谢,您能帮我解决这个问题吗?
答案 0 :(得分:0)
您只需要
struct StreamsData: Codable{
let availableChannels: [String: Channel]
}
struct Channel: Codable{
let creationDate,categoryId: String
}
do {
let dec = JSONDecoder()
dec.keyDecodingStrategy = .convertFromSnakeCase
let res = try dec.decode(StreamsData.self, from: data)
}
catch {
print(error)
}