Aller au contenu

Convertir JSON en case classes Scala — Numio

Transforme un échantillon JSON en case classes Scala. Les objets imbriqués deviennent des case classes distinctes et les tableaux Seq[...] ; les valeurs null et les clés absentes de certains éléments d’un tableau deviennent Option[...].

Ébaucher les modèles d’une API JSON avant d’ajouter un codec Circe, Play JSON ou uPickle.

JSON

Scala Case Class

Quand l’utiliser

  • Ébaucher les modèles d’une API JSON avant d’ajouter un codec Circe, Play JSON ou uPickle.
  • Transformer un payload Kafka ou HTTP d’exemple en case classes pour un job Spark ou Akka.

Mode d’emploi

  1. Collez un objet JSON ; pour les champs optionnels, incluez plusieurs éléments de tableau avec des clés différentes.
  2. Vérifiez la sortie : la classe racine est RootInterface et les classes imbriquées prennent le nom de leur clé en PascalCase (speakers devient Speakers).
  3. Copiez les classes, renommez-les et précisez tout Option[Any] ou Seq[Any] que l’échantillon n’a pas permis de typer.

Entrée 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 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]
)

Détails et limites

S’exécute dans le navigateur avec le générateur propre au site ; aucun appel serveur. La page n’a pas de paramètres et n’ajoute ni imports ni dérivations de codecs.

Tous les éléments d’un tableau sont fusionnés : une clé absente de certains éléments, ou null dans certains, devient Option[...], et 12 à côté de 1.5 devient Double.

Une valeur toujours null donne Option[Any] et un tableau vide Seq[Any], car l’échantillon n’indique aucun type.

Les mots réservés et les clés qui ne sont pas des identifiants sont entourés de backticks, comme `type` ; les clés en snake_case sont conservées telles quelles.

FAQ

Génère-t-il Option pour les champs nullables ?

Oui. Une clé dont la valeur est null devient Option[...], typé d’après les autres échantillons quand la clé a aussi des valeurs réelles, sinon Option[Any]. Les clés absentes de certains éléments d’un tableau deviennent aussi Option.

Que se passe-t-il avec un tableau JSON à la racine ?

Ses éléments sont fusionnés en une seule case class RootInterface, les clés absentes de certains éléments devenant Option, et type RootInterfaceList = Seq[RootInterface] est ajouté.

Un identifiant 64 bits est-il typé Long ?

Seulement si une valeur de l’échantillon sort de la plage de Int (environ ±2,1 milliards). Les autres entiers deviennent Int ; passez donc en Long les identifiants ou timestamps susceptibles de grandir.

Spécifications et références