0Pricing
Scala for Backend Engineering & Functional Programming · Aula

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

  1. Analisando JSON
  2. Decodificando em classes de caso
  3. Codificando para JSON
  4. Codecs personalizados
← Voltar para Scala for Backend Engineering & Functional Programming