Converteer JSON naar Scala Case-klassen — Numio
Verandert een JSON-sample in Scala-caseklassen. Geneste objecten worden afzonderlijke case-klassen en arrays Seq[...]; null-waarden en sleutels die in sommige array-items ontbreken, worden Option[...].
Modellen opstellen voor een JSON API voordat een Circe-, Play JSON- of uPickle-codec wordt toegevoegd.
JSON
Scala Case Class
Wanneer gebruik je dit?
- Modellen opstellen voor een JSON API voordat een Circe-, Play JSON- of uPickle-codec wordt toegevoegd.
- Een voorbeeld van een Kafka- of HTTP-payload omzetten in case-klassen voor een Spark- of Akka-taak.
Hoe werkt het
- Plak een JSON-object; want optionele velden bevatten verschillende array-items met verschillende sleutels.
- Controleer de uitvoer: de hoofdklasse is RootInterface en geneste klassen worden genoemd op basis van hun sleutels in PascalCase (luidsprekers worden luidsprekers).
- Kopieer de klassen, hernoem ze en beperk elke Option[Any] of Seq[Any] die de sample niet kon typen.
JSON-ingang
{
"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" }
]
}Scala-casusklassen
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] )
Details en beperkingen
Draait in de browser met de eigen generator van de site; geen serveroproep. De pagina heeft geen instellingen en voegt geen imports of codec-afleidingen toe.
Alle items van een array worden samengevoegd: een sleutel die bij sommige items ontbreekt, of bij sommige nul is, wordt Option[...] en 12 naast 1,5 wordt Double.
Een waarde die altijd nul is, geeft Option[Any] en een lege array Seq[Any], omdat het voorbeeld geen type heeft om weer te geven.
Gereserveerde woorden en sleutels die geen ID's zijn, worden omsloten door backticks, zoals `type`; snake_case-sleutels worden bewaard zoals geschreven.
FAQ
Genereert het een optie voor null-velden?
Ja. Een sleutel waarvan de waarde nul is, wordt Option[...], getypt uit de andere voorbeelden wanneer de sleutel ook echte waarden heeft, anders Option[Any]. Sleutels die ontbreken in sommige array-items zijn ook Option.
Wat gebeurt er met een JSON-array in de root?
De items ervan zijn samengevoegd in één RootInterface-zaakklasse, waarbij bij sommige items sleutels ontbreken als Option, en het type RootInterfaceList = Seq[RootInterface] is toegevoegd.
Is een 64-bit ID getypt als Long?
Alleen als een monsterwaarde buiten het Int-bereik ligt (ongeveer ±2,1 miljard). Andere hele getallen worden Int, dus verander ID's of tijdstempels in Long als ze kunnen groeien.