我的格式为json
:
{
"route":{
"1":"Atrakcyjno\u015b\u0107 przyrodnicza",
"2":"Atrakcyjno\u015b\u0107 kulturowa",
"3":"Dla rodzin z dzie\u0107mi",
"5":"Dla senior\u00f3w",
"6":"Dla or\u0142\u00f3w",
"8":"Niepe\u0142nosprawni"
},
"apartments":{
"1":"WifI",
"4":"Gastronomia",
"5":"Parking",
"6":"Dla niepe\u0142nosprawnych",
"7":"Dla rodzin z dzie\u0107mi",
"8":"Dla senior\u00f3w"
},
"levels":{
"1":"\u0141atwy",
"2":"\u015aredni",
"3":"Trudny",
"4":"Bardzo trudny"
}
}
我想尽可能简单地解码它,但我不知道如何解码这些子词典。这些是dicts
,但应该是array
。我可以以某种方式写一些东西,这将使它以特殊方式解码,以便我将得到数组?到目前为止,我有这样的事情:
struct PreferencesList: Decodable {
private enum CodingKeys: String, CodingKey {
case routes = "route"
case apartments
case levels
}
let routes: [Preference]
let apartments: [Preference]
let levels: [Preference]
}
struct Preference: Decodable {
let id: Int
let name: String
}
答案 0 :(得分:2)
我想你需要一步一步地做这件事。
让你的结构保持原状。 Preference
不需要Decodable
。然后,像这样覆盖init(from decoder: Decoder) throws
函数。
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let routes = try container.decode([String: String].self, forKey: .routes)
self.routes = []
for (key, value) in routes {
self.routes.append(Preference(id: key, name: value))
}
// Do the same for other var...
}
我希望它有所帮助。