Codable: codificação e decodificação de JSON
Adote Codable, use CodingKeys personalizados e faça a decodificação de containers aninhados.
Codable: codificação e decodificação de JSON é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
Protocolo Codable
Codable é um alias de tipo para Encodable & Decodable. Os tipos que estão em conformidade podem ser codificados em JSON e decodificados a partir de JSON automaticamente.
struct User: Codable {
var name: String
var age: Int
}Síntese automática
O Swift sintetiza as implementações de Codable quando todas as propriedades armazenadas também estão em conformidade com Codable.
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}Decodificando JSON
Use JSONDecoder para decodificar Data no seu tipo Decodable.
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // AliceCodificando em JSON
Use JSONEncoder para codificar um valor Codable em Data.
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)CodingKeys personalizados
Use uma enumeração CodingKeys para mapear entre os nomes das propriedades do Swift e as chaves JSON.
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}Estratégias de decodificação de datas
Configure JSONDecoder.dateDecodingStrategy para analisar datas em vários formatos.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)Contêineres aninhados
Decodifique objetos JSON aninhados definindo estruturas Codable aninhadas ou usando contêineres com chaves manualmente.
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)Lógica de decodificação personalizada
Substitua init(from:) para estruturas JSON fora do padrão ou para aplicar transformações durante a decodificação.
struct Rating: Codable {
var stars: Int
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let raw = try container.decode(Double.self)
stars = Int(raw.rounded())
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(Double(stars))
}
}keyDecodingStrategy
Use .convertFromSnakeCase para converter automaticamente chaves JSON em snake_case em propriedades Swift em camelCase.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameOpções de codificação
Configure JSONEncoder.outputFormatting para obter uma saída formatada ou ordenada.
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)Como lidar com campos opcionais
Marque as propriedades como opcionais para lidar adequadamente com chaves JSON ausentes sem lançar erros.
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}Verificação rápida
Qual estratégia do JSONDecoder mapeia automaticamente as chaves JSON em snake_case para nomes de propriedades Swift em camelCase?
Recapitulação da lição
Adote Codable para codificação e decodificação automáticas de JSON. Use CodingKeys para remapear nomes de propriedades, keyDecodingStrategy = .convertFromSnakeCase para APIs com snake_case, init(from:) personalizado para JSON fora do padrão e dateDecodingStrategy para analisar datas.
Perguntas Frequentes
A aula “Codable: codificação e decodificação de JSON” é grátis?
Sim — o texto completo de “Codable: codificação e decodificação de JSON” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Codable: codificação e decodificação de JSON”?
Adote Codable, use CodingKeys personalizados e faça a decodificação de containers aninhados. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Codable: codificação e decodificação de JSON”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- URLSession data(from:) com async/await
- Codable: codificação e decodificação de JSON
- Tratamento de erros e códigos de status HTTP
- Lógica de novas tentativas e URLSession em segundo plano