0Pricing
Swift Academy · Aula

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) // Alice

Codificando 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" → firstName

Opçõ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

  1. URLSession data(from:) com async/await
  2. Codable: codificação e decodificação de JSON
  3. Tratamento de erros e códigos de status HTTP
  4. Lógica de novas tentativas e URLSession em segundo plano
← Voltar para Swift Academy