>我需要根据来自服务器的一个特定键将JSON解析为不同的模型 - 如果key = "userCoupon",我需要将其映射到名为UserCouponDTO的模型中,如果key = "discountCoupon",我需要将响应映射到另一个名为DiscountCouponDTO的DTO。我正在使用Alamofire进行网络调用,使用ObjectMapper进行映射。
在 swift 4 中,使用新的 Decodable 协议将响应映射到 swift 结构非常容易
看看这篇文章: https://grokswift.com/json-swift-4/
服务器响应与结构匹配的简单示例
struct User: Decodable {
let name: String
let email: String?
}
在这种情况下,服务器可能会响应
{
"name": "John"
}
let decoder = JSONDecoder()
let user = try decoder.decode(dataFromServer, User.self)
在这种情况下,用户对象将定义名称,电子邮件 = nil
如果需要从snake_case映射到驼峰,可以使用编码键
struct User: Decodable {
let firstName: String
let lastName: String
let email: String
enum CodingKeys: String, CodingKey {
case email
case firstName = "first_name"
case lastName = "last_name"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
email = try values.decode(String.self, forKey: .email)
firstName = try values.decode(String.self, forKey: .firstName)
lastName = try values.decode(String.self, forKey: .lastName)
}
}
希望这有帮助