您可以使用自定义解码器,这样就不必创建其他对象。
struct User: Decodable {
let name: String
let age: Int
let address: Address
struct Address: Decodable {
let city: String
let country: String
}
enum CodingKeys: String, CodingKey {
case user
case address
}
enum UserKeys: String, CodingKey {
case name
case age
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let user = try container.nestedContainer(keyedBy: UserKeys.self, forKey: .user)
name = try user.decode(String.self, forKey: .name)
age = try user.decode(Int.self, forKey: .age)
address = try container.decode(Address.self, forKey: .address)
}
}
因此,将您的数据放入游乐场
let data = """
{
"users":[
{
"user":{
"name":"Adam",
"age":25
},
"address":{
"city":"Stockholm",
"country":"Sweden"
}
},
{
"user":{
"name":"Lilly",
"age":24
},
"address":{
"city":"Copenhagen",
"country":"Denmark"
}
}
]
}
""".data(using: .utf8)!
你可以这样解码:
let decoder = JSONDecoder()
let result = try! decoder.decode([String:[User]].self, from: data)
或者您可以创建一个 Users 结构,这样您就不必处理字典
struct Users: Decodable {
let users: [User]
}
let decoder = JSONDecoder()
let result = try! decoder.decode(Users.self, from: data)