JSON in Scala-Case-Classes umwandeln — Numio
Wandelt ein JSON-Beispiel in Scala-Case-Classes um. Verschachtelte Objekte werden zu eigenen Case-Classes und Arrays zu Seq[...]; null-Werte und Schlüssel, die in einigen Array-Elementen fehlen, werden zu Option[...].
Modelle für eine JSON-API entwerfen, bevor ein Circe-, Play-JSON- oder uPickle-Codec hinzukommt.
JSON
Scala Case Class
Wann sie hilft
- Modelle für eine JSON-API entwerfen, bevor ein Circe-, Play-JSON- oder uPickle-Codec hinzukommt.
- Ein Beispiel-Payload aus Kafka oder HTTP in Case-Classes für einen Spark- oder Akka-Job umwandeln.
Anwendung
- Füge ein JSON-Objekt ein; für optionale Felder nimm mehrere Array-Elemente mit unterschiedlichen Schlüsseln auf.
- Prüfe die Ausgabe: Die Root-Klasse heißt RootInterface, verschachtelte Klassen werden nach ihren Schlüsseln in PascalCase benannt (speakers wird zu Speakers).
- Kopiere die Klassen, benenne sie um und präzisiere jedes Option[Any] oder Seq[Any], das das Beispiel nicht typisieren konnte.
JSON-Eingabe
{
"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-Case-Classes
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 und Einschränkungen
Läuft im Browser mit dem eigenen Generator der Seite; kein Serveraufruf. Die Seite hat keine Einstellungen und fügt keine Imports oder Codec-Ableitungen hinzu.
Alle Elemente eines Arrays werden zusammengeführt: Ein Schlüssel, der in einigen Elementen fehlt oder dort null ist, wird zu Option[...], und 12 neben 1.5 wird zu Double.
Ein Wert, der immer nur null ist, ergibt Option[Any] und ein leeres Array Seq[Any], weil das Beispiel keinen Typ zeigt.
Reservierte Wörter und Schlüssel, die keine Bezeichner sind, werden in Backticks gesetzt, etwa `type`; snake_case-Schlüssel bleiben wie geschrieben.
FAQ
Erzeugt es Option für nullable Felder?
Ja. Ein Schlüssel mit dem Wert null wird zu Option[...], typisiert anhand der anderen Beispiele, wenn der Schlüssel auch echte Werte hat, sonst Option[Any]. Schlüssel, die in einigen Array-Elementen fehlen, werden ebenfalls Option.
Was passiert mit einem JSON-Array auf oberster Ebene?
Seine Elemente werden zu einer einzigen Case-Class RootInterface zusammengeführt, wobei in einigen Elementen fehlende Schlüssel Option sind, und type RootInterfaceList = Seq[RootInterface] wird ergänzt.
Wird eine 64-Bit-ID als Long typisiert?
Nur wenn ein Beispielwert außerhalb des Int-Bereichs liegt (etwa ±2,1 Milliarden). Andere ganze Zahlen werden zu Int; ändere IDs oder Zeitstempel daher in Long, wenn sie wachsen können.