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

Ios 如何根据密钥将JSON解析为不同的模型?,ios,swift,alamofire,objectmapper,Ios,Swift,Alamofire,Objectmapper,我需要根据来自服务器的一个特定密钥将JSON解析为不同的模型,例如,如果key=userCoupon,我需要将其映射到名为usercoupondo的模型中,如果key=discountCoupon,我需要将响应映射到另一个名为DiscountCouponDTO的DTO中。我使用Alamofire进行网络调用,使用ObjectMapper进行映射。在swift 4中,使用新的可解码协议很容易将响应映射到swift结构 看看这篇文章: 服务器响应与结构匹配的简单示例 struct User: Dec

我需要根据来自服务器的一个特定密钥将JSON解析为不同的模型,例如,如果key=userCoupon,我需要将其映射到名为usercoupondo的模型中,如果key=discountCoupon,我需要将响应映射到另一个名为DiscountCouponDTO的DTO中。我使用Alamofire进行网络调用,使用ObjectMapper进行映射。

在swift 4中,使用新的可解码协议很容易将响应映射到swift结构

看看这篇文章:

服务器响应与结构匹配的简单示例

struct User: Decodable {
  let name: String
  let email: String?
}
在这种情况下,服务器可能会使用

{
  "name": "John"
}

let decoder = JSONDecoder()
let user = try decoder.decode(dataFromServer, User.self)
在这种情况下,用户对象将定义名称,email=nil

如果需要从snake_案例映射到camelCase,可以使用编码键

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)
  }
}

希望这有帮助

好的,那么您是否面临任何问题?你试过什么?你有没有遵循任何答案或教程?