Saltar al contenido

Convertir JSON a case classes de Scala — Numio

Convierte una muestra JSON en case classes de Scala. Los objetos anidados pasan a case classes independientes y los arrays a Seq[...]; los valores null y las claves que faltan en algunos elementos de un array pasan a Option[...].

Esbozar los modelos de una API JSON antes de añadir un codec de Circe, Play JSON o uPickle.

JSON

Scala Case Class

Cuándo usarla

  • Esbozar los modelos de una API JSON antes de añadir un codec de Circe, Play JSON o uPickle.
  • Convertir un payload de ejemplo de Kafka o HTTP en case classes para un job de Spark o Akka.

Cómo usarla

  1. Pega un objeto JSON; para los campos opcionales, incluye varios elementos de array con claves distintas.
  2. Revisa la salida: la clase raíz es RootInterface y las clases anidadas toman el nombre de su clave en PascalCase (speakers pasa a Speakers).
  3. Copia las clases, cámbiales el nombre y concreta cualquier Option[Any] o Seq[Any] que la muestra no pudo tipar.

Entrada JSON

{
  "id": 7,
  "type": "conference",
  "price": 49.9,
  "venue": null,
  "tags": ["jvm", "fp"],
  "speakers": [
    { "name": "Martin", "talk": "Keynote" },
    { "name": "Li", "talk": "Effects", "slides": "https://example.com/s.pdf" }
  ]
}

Case classes de Scala

case class RootInterface(
  id: Int,
  `type`: String,
  price: Double,
  venue: Option[Any],
  tags: Seq[String],
  speakers: Seq[Speakers]
)

case class Speakers(
  name: String,
  talk: String,
  slides: Option[String]
)

Detalles y limitaciones

Se ejecuta en el navegador con el generador propio del sitio; no hay llamadas al servidor. La página no tiene configuración y no añade imports ni derivaciones de codecs.

Todos los elementos de un array se fusionan: una clave que falta en algunos elementos, o que es null en algunos, pasa a Option[...], y 12 junto a 1.5 pasa a Double.

Un valor que solo es null da Option[Any] y un array vacío Seq[Any], porque la muestra no indica ningún tipo.

Las palabras reservadas y las claves que no son identificadores se envuelven en backticks, como `type`; las claves en snake_case se mantienen tal cual.

FAQ

¿Genera Option para los campos anulables?

Sí. Una clave cuyo valor es null pasa a Option[...], tipado a partir de las demás muestras cuando la clave también tiene valores reales; si no, Option[Any]. Las claves que faltan en algunos elementos de un array también son Option.

¿Qué pasa con un array JSON en la raíz?

Sus elementos se fusionan en una única case class RootInterface, con las claves que faltan en algunos elementos como Option, y se añade type RootInterfaceList = Seq[RootInterface].

¿Un ID de 64 bits tiene tipo Long?

Solo cuando algún valor de la muestra queda fuera del rango de Int (unos ±2.100 millones). Los demás enteros pasan a Int, así que cambia a Long los IDs o timestamps que puedan crecer.

Especificaciones y referencias