返回
定制 JSON 编解码和解密的小贴士和窍门
IOS
2023-11-18 09:56:14
介绍
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 数据。