Skip to Content
iOS🌐 NetworkingJSON Parsing

JSON Parsing

1. Codable Model

struct User: Codable, Identifiable { let id: Int let name: String let email: String }

2. Nested JSON

struct Response: Codable { let status: String let data: DataWrapper } struct DataWrapper: Codable { let users: [User] } // Decode let response = try JSONDecoder().decode(Response.self, from: data) let users = response.data.users

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

let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 // Custom format let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" decoder.dateDecodingStrategy = .formatted(formatter)

5. Snake Case

let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase

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

StrategyMục đích
CodingKeysMap property names
.convertFromSnakeCasesnake_case → camelCase
.iso8601Parse ISO dates
decodeIfPresentOptional values
Last updated on