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
- Collez un objet JSON ; pour les champs optionnels, incluez plusieurs éléments de tableau avec des clés différentes.
- 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).
- 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.