返回

定制 JSON 编解码和解密的小贴士和窍门

IOS

介绍

Codable 协议是 Swift 中用于编码和解码数据的协议。它还包含另外两个协议: Encodable 和 Decodable。Encodable 协议用于将数据编码为 JSON 或其他格式,而 Decodable 协议用于将 JSON 或其他格式的数据解码为 Swift 结构体或枚举。

使用自定义密钥

在某些情况下,您可能希望使用自定义密钥来编码或解码 JSON 数据。例如,您可能希望使用下划线分隔的密钥,而不是驼峰式密钥。要做到这一点,您可以创建一个自定义的编码器或解码器。

以下是如何创建一个自定义的编码器来使用下划线分隔的密钥:

struct UnderlineKeyEncodingStrategy: JSONEncoder.KeyEncodingStrategy {
  func encode(key: CodingKey) -> CodingKey {
    CodingKey(stringValue: key.stringValue.replacingOccurrences(of: " ", with: "_"))!
  }
}

现在,您可以使用此编码器来对 JSON 数据进行编码:

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .custom(UnderlineKeyEncodingStrategy())

let data = try encoder.encode(myObject)

以下是如何创建一个自定义的解码器来使用下划线分隔的密钥:

struct UnderlineKeyDecodingStrategy: JSONDecoder.KeyDecodingStrategy {
  func decode(key: CodingKey) throws -> CodingKey {
    CodingKey(stringValue: key.stringValue.replacingOccurrences(of: "_", with: " "))!
  }
}

现在,您可以使用此解码器来解码 JSON 数据:

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .custom(UnderlineKeyDecodingStrategy())

let myObject = try decoder.decode(MyObject.self, from: data)

创建自定义对象

在某些情况下,您可能希望创建自定义对象来表示 JSON 数据。例如,您可能希望创建一个对象来表示一个人的姓名、地址和电话号码。要做到这一点,您可以创建一个自定义的结构体或枚举。

以下是如何创建一个自定义的结构体来表示一个人的姓名、地址和电话号码:

struct Person: Codable {
  let firstName: String
  let lastName: String
  let address: String
  let phoneNumber: String
}

现在,您可以使用此结构体来编码或解码 JSON 数据:

let encoder = JSONEncoder()
let data = try encoder.encode(myPerson)

let decoder = JSONDecoder()
let myPerson = try decoder.decode(Person.self, from: data)

结语

自定义 JSON 编解码和解密是 Swift 中一项强大的功能。它可以让您创建自己的编码器和解码器,以满足您的特定需求。在本教程中,我们学习了如何使用自定义密钥来编码和解码 JSON 数据,以及如何创建自定义对象来表示 JSON 数据。