我将JSON作为字典[String,Anyobject]:
{
"AED": "United Arab Emirates Dirham",
"AFN": "Afghan Afghani",
"ALL": "Albanian Lek",
}
我需要将其解码为可编码结构货币数组,例如:
struct Currency: Codable {
var code: String
var name: String
}
Currency(code: "AED", name: "United Arab Emirates Dirham")
答案 0 :(得分:3)
您可以将json解码为Dictionary并映射到Array。
let currencies = try? JSONDecoder()
.decode([String: String].self, from: data)
.map({ Currency(code: $0.key, name: $0.value) })
答案 1 :(得分:1)
您需要创建一个容器,例如名为“ Currencies”的容器才能使用单一值容器。
我为您分享了示例游乐场:
let str = """
{
"AED": "United Arab Emirates Dirham",
"AFN": "Afghan Afghani",
"ALL": "Albanian Lek",
}
"""
struct Currencies: Codable {
var values: [Currency]
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let dict = try container.decode([String: String].self)
values = dict.map({ (key, value) in
return Currency(code: key, name: value)
})
}
}
struct Currency: Codable {
var code: String
var name: String
enum CodingKeys: String, CodingKey {
case code
case name
}
}
let currencies = try JSONDecoder().decode(Currencies.self, from: Data(str.utf8))
print(currencies.values)