0Pricing
Scala for Backend Engineering & Functional Programming · Lección

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

  1. Analizar JSON
  2. Decodificar en case classes
  3. Codificar en JSON
  4. Codecs personalizados
← Volver a Scala for Backend Engineering & Functional Programming