Codificar en JSON
Serialice sus datos
Codificar en JSON es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
Los codificadores producen JSON
Un Encoder[A] es el equivalente inverso de un decodificador: convierte un valor de Scala de tipo A en un árbol Json de Circe.
A partir de ahí, puede serializarlo en un String para respuestas HTTP, registros o almacenamiento.
La sintaxis asJson
Importe io.circe.syntax._ para obtener el método de extensión .asJson en cualquier valor que tenga un Encoder disponible.
Los tipos primitivos y las colecciones funcionan de inmediato.
import io.circe.syntax._
println(42.asJson.noSpaces) // 42
println("hi".asJson.noSpaces) // "hi"
println(List(1,2,3).asJson.noSpaces) // [1,2,3]Derivar codificadores
Al igual que los decodificadores, los codificadores para case classes se derivan automáticamente. Importe io.circe.generic.auto._ para usar la derivación automática.
Los nombres de los campos se convierten en claves JSON y sus valores se codifican 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 obtener instancias explícitas y reutilizables, use deriveEncoder de io.circe.generic.semiauto.
Al colocarlo en el objeto complementario, dispondrá de un único Encoder[User] compartido en todo el código.
import io.circe.Encoder
import io.circe.generic.semiauto._
object User {
implicit val enc: Encoder[User] = deriveEncoder[User]
}Construir Json manualmente
Puede construir JSON directamente con Json.obj y pares clave/valor cuyos valores usen .asJson.
Esto resulta práctico para estructuras puntuales que no se corresponden con una case class.
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}Opciones de codificación
Un campo Option[A] codifica Some(x) como el valor y None como JSON null de forma predeterminada.
Si prefiere omitir por completo las claves nulas, puede eliminarlas después de la codificación, como se muestra más adelante.
case class Account(id: Long, nick: Option[String])
println(Account(7, None).asJson.noSpaces)
// {"id":7,"nick":null}Eliminar valores nulos
Para omitir los valores nulos, transforme el Json resultante con .deepDropNullValues.
Esto elimina recursivamente las claves cuyo valor es null y produce una salida más limpia para los campos opcionales.
val clean = Account(7, None).asJson.deepDropNullValues
println(clean.noSpaces)
// {"id":7}Imprimir la salida con formato
Use .spaces2 o .spaces4 para obtener JSON indentado y legible, y .noSpaces para un formato compacto de transmisión.
Para controlar completamente el formato, cree un Printer personalizado.
import io.circe.Printer
val printer = Printer.spaces2.copy(dropNullValues = true)
println(printer.print(Account(7, None).asJson))Codificar mapas
Un Map[String, A] se codifica como un objeto JSON, y las claves del mapa se convierten en claves JSON.
Para tipos de clave que no sean cadenas, debe proporcionar un KeyEncoder que convierta la clave en texto.
import io.circe.syntax._
val scores = Map("ada" -> 90, "alan" -> 85)
println(scores.asJson.noSpaces)
// {"ada":90,"alan":85}Transformar codificadores
Puede adaptar un codificador existente con contramap: proporcione una función que convierta su tipo en un tipo que Circe ya sepa codificar.
Así evita escribir un codificador completo desde cero.
import io.circe.Encoder
case class UserId(value: Long)
implicit val enc: Encoder[UserId] =
Encoder[Long].contramap(_.value)Codificar y decodificar juntos
Cuando necesite ambas direcciones, derive un único Codec[A] con deriveCodec, que agrupa un codificador y un decodificador.
Esto mantiene ambos sincronizados a medida que evoluciona la case class.
import io.circe.Codec
import io.circe.generic.semiauto._
implicit val codec: Codec[User] = deriveCodec[User]Comprobación rápida
Compruebe lo que ha aprendido sobre la codificación a JSON.
Repaso
Un Encoder[A] convierte valores de Scala en Json. Use .asJson con codificadores derivados o construya árboles con Json.obj.
None se convierte en null a menos que lo elimine; contramap reutiliza codificadores; deriveCodec agrupa ambas direcciones.
Preguntas frecuentes
¿La lección «Codificar en JSON» es gratis?
Sí — el texto completo de «Codificar en JSON» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Qué aprenderé en «Codificar en JSON»?
Serialice sus datos Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?
No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Codificar en JSON»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?
Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Analizar JSON
- Decodificar en case classes
- Codificar en JSON
- Codecs personalizados