Scala-zu-JSON-Konverter
Füg deine Scala case classes oder Objekte ein. Bekomm sauberes JSON zurück.
Was dieses Tool macht
Wenn du eine Scala-case class mit einem Dutzend Feldern hast und das passende JSON-Payload brauchst — für einen Test, einen API-Call, ein Kafka-Message-Fixture — wird das Zusammenbauen per Hand schnell mühsam. Scala hier einfügen und du kriegst gültiges JSON zurück. Eine case class, eine Datei voll davon oder eine komplette Instanz mit named arguments — gleicher Flow, gleiches Ergebnis.
Der Konverter spiegelt wider, was die gängigen Scala-JSON-Libraries ausgeben. Circe, Play JSON und uPickle serialisieren eine case class, indem sie die Felder in JSON-Keys umwandeln — genau das passiert hier. Int, Long, Double und BigDecimal werden JSON-Zahlen. Boolean bleibt ein Boolean. Option[A] wird zum Wert bei Some(x) oder zu null / wird weggelassen bei None. Instant, LocalDateTime und andere java.time-Typen kommen als ISO-8601-Strings raus.
Collections folgen dem offensichtlichen Mapping. List, Seq, Vector und Set werden JSON-Arrays. Map[String, A] wird ein JSON-Objekt. Tupel werden JSON-Arrays mit gemischten Werten. Wenn du einen sealed trait mit case-class-Kindern (einen ADT) einfügst, wird jede Variante in ihrer eigenen Form serialisiert, und der Parser erkennt das ADT-Discriminator-Pattern, das die meisten Libraries nutzen. Füg mehrere Top-Level-Klassen aus einer Datei ein (siehe das Scala-Repo für Inspiration) und jede bekommt ihren eigenen JSON-Eintrag.
So benutzt du es
Drei Schritte. Funktioniert gleich für eine einzelne case class oder eine ganze Modelldatei.
Scala einfügen (oder das Beispiel probieren)
Wirf dein Scala unverändert in den linken Editor. Eine case class, eine sealed trait-Hierarchie, eine Instanz oder mehrere Klassen — alles geht. Klick auf Beispiel laden, falls du erst ein realistisches Beispiel sehen willst.
Lass deine Imports, Package-Deklarationen und Annotations drin. Der Parser ignoriert, was keine Daten sind. Für Sprachdetails ist docs.scala-lang.org die maßgebliche Referenz.
Auf Konvertieren drücken
Klick den grünen Konvertieren-Button. Das Tool liest das Scala, läuft durch jede Klasse und jedes Feld und erzeugt JSON in einem Durchgang. Kurzer Lade-Indikator während es läuft.
JSON kopieren
Das rechte Panel füllt sich mit eingerücktem JSON. Pack es in einen ScalaTest-Spec, eine gemockte Akka-HTTP-Response, ein Play-Fixture oder deine API-Doku.
Wann das wirklich hilft
ScalaTest-Fixtures
Du brauchst einen JSON-Body, um einen HTTP-Client in einem Scala-Service-Test zu stubben. Case class einfügen, Payload holen, in den Spec packen.
Akka-/Play-HTTP-Payloads
Mach aus einer case class das JSON, das du an deinen eigenen Service POSTen würdest. Praktisch für schnelle curl-Tests, wenn du einen neuen Endpunkt verdrahtest.
Kafka-Message-Samples
Generiere Beispiel-JSON-Messages für ein neues Kafka-Topic direkt aus deinen Domain-case-classes — keine handgeschriebenen Beispiele mehr, die mit der Zeit auseinanderdriften.
Doku, die zum Code passt
Produziere JSON-Beispiele für die API-Doku direkt aus deinen echten case classes, damit die Doku aktuell bleibt, während sich die Modelle entwickeln.
Häufige Fragen
Wie werden Option-Werte serialisiert?
Some(x) wird zum Wert x; None wird zu JSON null. Das entspricht dem Default-Verhalten von Circe. Wenn du die Keys für None lieber weggelassen hättest, kannst du sie hinterher strippen — der sichere Default hält die Form vorhersehbar.
Was ist mit sealed traits und ADTs?
Sealed traits mit case-class-Kindern werden pro Variante serialisiert. Das übliche Discriminator-Pattern ({"type": "OrderPlaced", ...}), das Circe und Play JSON nutzen, wird angewendet, wenn mehrere Varianten einen Eltern-Trait teilen, sodass du die Daten in den ADT round-trippen kannst.
Wie werden java.time-Typen behandelt?
Instant, LocalDate, LocalDateTime und ZonedDateTime werden zu ISO-8601-Strings serialisiert. Das ist die Konvention, die Circe, Play JSON und uPickle teilen, und sie round-trippt sauber zurück zu java.time.
Behandelt es Map, List, Vector, Set?
Ja. List, Seq, Vector und Set werden alle JSON-Arrays. Map[String, A] wird ein JSON-Objekt — Maps ohne String-Keys (Map[Int, A]) werden als Arrays von Key-Value-Paaren emittiert, da JSON nur String-Keys unterstützt.
Kann ich eine ganze Datei mit mehreren case classes einfügen?
Ja. Jede Top-Level-Klasse wird zu ihrem eigenen JSON-Eintrag, geschachtelte Instanzen werden expandiert. Companion Objects, implicit conversions und Helper-Methoden werden übersprungen — nur Daten landen im Output.
Wird mein Code gespeichert?
Dein Scala wird fürs Konvertieren ans Backend geschickt und nicht persistiert. Wir loggen das Payload nicht. Wenn der Code sensibel ist, schau vorm Einfügen noch mal drüber.
Andere Tools, die du brauchen könntest
Scala zu JSON ist ein Baustein. Diese hier passen gut dazu: