Naar de inhoud

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

  1. Plak een JSON-object; want optionele velden bevatten verschillende array-items met verschillende sleutels.
  2. Controleer de uitvoer: de hoofdklasse is RootInterface en geneste klassen worden genoemd op basis van hun sleutels in PascalCase (luidsprekers worden luidsprekers).
  3. 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.

Specificaties en referenties