我正在尝试解析以下具有多个动态键的JSON响应,
{
"Nagaland": {
"districtData": {
"Dimapur": {
"confirmed": 1,
"lastupdatedtime": "",
"delta": {
"confirmed": 0
}
}
}
},
"Meghalaya": {
"districtData": {
"East Khasi Hills": {
"confirmed": 1,
"lastupdatedtime": "",
"delta": {
"confirmed": 0
}
}
}
}
}
我已经像下面那样编写了我的Codable结构,
struct IndianStateListModel: Codable {
// MARK: Properties
let state: [String: StateData]
}
struct StateData: Codable {
// MARK: Properties
var districtData: Inner?
/// Mapping Key Enum
private enum CodingKeys: String, CodingKey {
case districtData
}
}
struct Inner: Codable {
// MARK: Properties
let districts: [String: DistrictData]
}
struct DistrictData: Codable {
// MARK: Properties
var confirmed: Int?
var lastupdatedtime: String?
var delta: DailyConfirmedData?
/// Mapping Key Enum
private enum CodingKeys: String, CodingKey {
case confirmed, lastupdatedtime, delta
}
}
struct DailyConfirmedData: Codable {
// MARK: Properties
var confirmed: Int?
/// Mapping Key Enum
private enum CodingKeys: String, CodingKey {
case confirmed
}
}
称为,
let summary = try JSONDecoder().decode(IndianStateListModel.self, from: data)
但是返回nil
P.S .:有关可解码的Swift Codable with dynamic keys的相关问题
任何解决方案,都很好,请提前谢谢
您必须用来解析上述JSON Codable
的[data
模型应该是这样,
型号:
struct StateData: Codable {
var districtData: [String:DistrictData]?
}
struct DistrictData: Codable {
var confirmed: Int?
var lastupdatedtime: String?
var delta: DailyConfirmedData?
}
struct DailyConfirmedData: Codable {
var confirmed: Int?
}
解析中:
let summary = try JSONDecoder().decode([String:StateData].self, from: data)
注意:如果JSON密钥与enum CodingKeys
类型的属性完全匹配,则无需显式创建Codable
。
根本的问题是IndianStateListModel
具有称为states
的属性。但是,您的JSON中没有此类密钥。我建议用singleValueContainer
进行解析。例如。也许: