Che cosa fa questo strumento
Un campione JSON diventa case class Scala, una per oggetto.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
case class Root(
id: Long,
firstName: String,
address: Address
)
case class Address(
city: String
)
Anche un array di oggetti alla radice prende un nome: type Root = List[RootItem], un alias di primo livello, quindi Scala 3.
I backtick tengono la chiave
{ "content-type": "text/html", "class": 1 }
case class Root(
`content-type`: String,
`class`: Long
)
Scala prende per identificatore tutto ciò che sta tra backtick: il nome del campo può restare esattamente quello che diceva il JSON. Non è una scelta estetica: circe, zio-json e upickle ricavano tutti il nome JSON dal nome del campo, così questa case class legge il tuo carico com’è, senza annotazioni e senza decoder su misura.
L’altra via — rinominare in contentType — richiederebbe un codec configurato per rilegarlo, e un campione non può dire quale libreria usi.
I tipi, e i due che ammettono la propria ignoranza
Gli interi diventano Long e i decimali Double: un numero JSON non sta in modo affidabile né in un Int né in un Float, e allargare vale più di un traboccamento silenzioso.
null, un array vuoto e un array misto diventano tutti Any, esattamente tanto vago quanto il campione. Any è scomodo in Scala, e quel disagio è il punto: segna i campi su cui il documento non ha detto nulla, e non finge il contrario.
Ciò che un campione non può dire
Nessun campo è un Option, nessuno ha un valore predefinito e nulla è un sealed trait: un documento mostra una forma. Se due carichi differiscono per una chiave, quella è un’unione che modelli tu — e il punto in cui un tipo generato smette di servire e comincia il tuo progetto.
Privato per progettazione
Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.