JSON Parsing
1. Codable Model
Phần tiêu đề “1. Codable Model”struct User: Codable, Identifiable { let id: Int let name: String let email: String}2. Nested JSON
Phần tiêu đề “2. Nested JSON”struct Response: Codable { let status: String let data: DataWrapper}
struct DataWrapper: Codable { let users: [User]}
// Decodelet response = try JSONDecoder().decode(Response.self, from: data)let users = response.data.users3. Custom Keys
Phần tiêu đề “3. Custom Keys”struct Post: Codable { let id: Int let title: String let createdAt: Date
enum CodingKeys: String, CodingKey { case id case title case createdAt = "created_at" }}4. Date Decoding
Phần tiêu đề “4. Date Decoding”let decoder = JSONDecoder()decoder.dateDecodingStrategy = .iso8601
// Custom formatlet formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd"decoder.dateDecodingStrategy = .formatted(formatter)5. Snake Case
Phần tiêu đề “5. Snake Case”let decoder = JSONDecoder()decoder.keyDecodingStrategy = .convertFromSnakeCase6. Optional và Default Values
Phần tiêu đề “6. Optional và Default Values”struct Item: Codable { let id: Int let name: String let description: String? // Optional
// Default value var quantity: Int = 1
init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) id = try container.decode(Int.self, forKey: .id) name = try container.decode(String.self, forKey: .name) description = try container.decodeIfPresent(String.self, forKey: .description) quantity = try container.decodeIfPresent(Int.self, forKey: .quantity) ?? 1 }}📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”| Strategy | Mục đích |
|---|---|
CodingKeys |
Map property names |
.convertFromSnakeCase |
snake_case → camelCase |
.iso8601 |
Parse ISO dates |
decodeIfPresent |
Optional values |