Codable 编解码
Codable JSON 序列化、CodingKeys 映射、自定义编解码
Codable 编解码
Codable = Encodable + Decodable——只需声明遵守协议,Swift 自动生成 JSON 序列化代码。
学完本章你将: 掌握 Codable JSON 序列化、CodingKeys、自定义编解码。
基本 Codable
swift
struct User: Codable {
let name: String
let age: Int
let email: String
}
// JSON → 对象
let json = """
{"name": "小明", "age": 25, "email": "xm@test.com"}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let user = try decoder.decode(User.self, from: json)
print(user.name) // "小明"
// 对象 → JSON
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(user)
print(String(data: data, encoding: .utf8)!)
CodingKeys —— 自定义映射
swift
struct User: Codable {
let name: String
let createdAt: Date
enum CodingKeys: String, CodingKey {
case name
case createdAt = "created_at" // JSON 字段名映射
}
}
自定义编解码
swift
struct User: Codable {
let name: String
let age: Int
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
// 自定义验证
age = try container.decode(Int.self, forKey: .age)
guard age >= 0 else { throw DecodingError.dataCorrupted(...) }
}
}