Codificando para JSON
Serializar seus dados para saída.
Codificando para JSON é uma aula grátis de Scala for Backend Engineering & Functional Programming no CoddyKit. Esta é a aula 3 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 Scala for Backend Engineering & Functional Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
Codificadores produzem JSON
Um Encoder[A] é o equivalente inverso de um decodificador: transforma um valor Scala do tipo A em uma árvore Json do Circe.
A partir daí, você serializa o valor para uma String destinada a respostas HTTP, registros ou armazenamento.
A sintaxe asJson
Importe io.circe.syntax._ para obter o método de extensão .asJson em qualquer valor que tenha um Encoder disponível no escopo.
Tipos primitivos e coleções funcionam imediatamente.
import io.circe.syntax._
println(42.asJson.noSpaces) // 42
println("hi".asJson.noSpaces) // "hi"
println(List(1,2,3).asJson.noSpaces) // [1,2,3]Derivando codificadores
Assim como os decodificadores, os codificadores para classes de caso são derivados. Importe io.circe.generic.auto._ para usar a derivação automática.
Os nomes dos campos se tornam chaves JSON, e os valores dos campos são codificados recursivamente.
import io.circe.generic.auto._
import io.circe.syntax._
case class User(name: String, age: Int)
println(User("Ada", 36).asJson.noSpaces)
// {"name":"Ada","age":36}Codificadores semiautomáticos
Para obter instâncias explícitas e reutilizáveis, use deriveEncoder de io.circe.generic.semiauto.
Colocá-lo no objeto acompanhante fornece um único Encoder[User] compartilhado em todo o código.
import io.circe.Encoder
import io.circe.generic.semiauto._
object User {
implicit val enc: Encoder[User] = deriveEncoder[User]
}Criando Json manualmente
Você pode construir JSON diretamente com Json.obj e pares de chave e valor, em que os valores usam .asJson.
Isso é útil para estruturas pontuais que não correspondem a uma classe de caso.
import io.circe.Json
import io.circe.syntax._
val j = Json.obj(
"ok" -> true.asJson,
"count" -> 3.asJson
)
println(j.noSpaces) // {"ok":true,"count":3}Opções de codificação
Por padrão, um campo Option[A] codifica Some(x) como o valor e None como JSON null.
Se preferir omitir completamente as chaves nulas, você poderá removê-las depois da codificação, como mostrado mais adiante.
case class Account(id: Long, nick: Option[String])
println(Account(7, None).asJson.noSpaces)
// {"id":7,"nick":null}Removendo valores nulos
Para omitir valores nulos, transforme o Json resultante com .deepDropNullValues.
Isso remove recursivamente as chaves cujo valor é nulo, produzindo uma saída mais limpa para campos opcionais.
val clean = Account(7, None).asJson.deepDropNullValues
println(clean.noSpaces)
// {"id":7}Formatando a saída
Use .spaces2 ou .spaces4 para obter JSON indentado e legível, e .noSpaces para um formato compacto de transmissão.
Para ter controle total sobre a formatação, crie um Printer personalizado.
import io.circe.Printer
val printer = Printer.spaces2.copy(dropNullValues = true)
println(printer.print(Account(7, None).asJson))Codificando mapas
Um Map[String, A] é codificado como um objeto JSON, e as chaves do mapa se tornam chaves JSON.
Para tipos de chave que não sejam texto, você precisa fornecer um KeyEncoder que renderize a chave como texto.
import io.circe.syntax._
val scores = Map("ada" -> 90, "alan" -> 85)
println(scores.asJson.noSpaces)
// {"ada":90,"alan":85}Mapeando codificadores
Você pode adaptar um codificador existente com contramap: forneça uma função que transforme seu tipo em um tipo que o Circe já saiba codificar.
Isso evita escrever um codificador completo do zero.
import io.circe.Encoder
case class UserId(value: Long)
implicit val enc: Encoder[UserId] =
Encoder[Long].contramap(_.value)Codificando e decodificando juntos
Quando precisar das duas direções, derive um único Codec[A] com deriveCodec, que reúne um codificador e um decodificador.
Isso mantém os dois sincronizados à medida que a classe de caso evolui.
import io.circe.Codec
import io.circe.generic.semiauto._
implicit val codec: Codec[User] = deriveCodec[User]Verificação rápida
Teste sua compreensão da codificação para JSON.
Recapitulação
Um Encoder[A] transforma valores Scala em Json. Use .asJson com codificadores derivados ou crie árvores com Json.obj.
None se torna nulo, a menos que você o remova; contramap reutiliza codificadores; deriveCodec reúne as duas direções.
Perguntas Frequentes
A aula “Codificando para JSON” é grátis?
Sim — o texto completo de “Codificando para 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 Scala for Backend Engineering & Functional Programming, atualize para CoddyKit PRO. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
O que vou aprender em “Codificando para JSON”?
Serializar seus dados para saída. Você pratica Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
Nenhuma experiência prévia é necessária. Scala for Backend Engineering & Functional Programming 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 3 de 4.
Quanto tempo leva a aula “Codificando para 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 Scala for Backend Engineering & Functional Programming?
Sim. Cada aula de Scala for Backend Engineering & Functional Programming 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
- Analisando JSON
- Decodificando em classes de caso
- Codificando para JSON
- Codecs personalizados