如何根据密钥将 JSON 解析为不同的模型



>我需要根据来自服务器的一个特定键将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)
  }
}

希望这有帮助

相关内容

  • 没有找到相关文章

最新更新