【问题标题】:How to parse JSON into different models based on key?如何根据 key 将 JSON 解析成不同的模型?
【发布时间】:2018-04-23 12:34:37
【问题描述】:

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

【问题讨论】:

  • 好的,你有什么问题吗?你试过什么?您遵循的任何答案或教程?

标签: ios swift alamofire objectmapper


【解决方案1】:

在 swift 4 中,使用新的可解码协议将响应映射到 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)

在这种情况下,用户对象将定义名称并且 email = nil

如果您需要从snake_case 映射到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)
  }
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多