Konwerter Scala do JSON
Wklej swoje case class albo obiekty Scali. Dostaniesz czysty JSON.
Co robi to narzędzie
Jeśli masz case class w Scali z tuzinem pól i potrzebujesz pasującego payloadu JSON — do testu, wywołania API, fixture'a wiadomości Kafki — klepanie tego ręcznie szybko się nudzi. Wklej tu Scalę i dostajesz poprawny JSON. Jeden case class, plik pełen case classów albo gotowa instancja zbudowana named argumentami — ten sam flow, ten sam wynik.
Konwerter odwzorowuje to, co produkują popularne biblioteki JSON w Scali. Circe, Play JSON i uPickle serializują case class, zamieniając pola na klucze JSON — dokładnie to tu dostajesz. Int, Long, Double i BigDecimal stają się liczbami JSON. Boolean pozostaje boolem. Option[A] to wartość przy Some(x), albo null / jest pomijane przy None. Instant, LocalDateTime i inne typy z java.time wychodzą jako stringi ISO-8601.
Kolekcje mapują się oczywiście. List, Seq, Vector i Set stają się tablicami JSON. Map[String, A] to obiekt JSON. Krotki stają się tablicami JSON z wartościami różnych typów. Jeśli wkleisz sealed trait z dziećmi case class (ADT), każdy wariant zostanie zserializowany w swoim kształcie, a parser rozpozna wzorzec discriminatora ADT, którego używa większość bibliotek. Wklej kilka klas top-level z jednego pliku (zerknij do repo Scali po inspirację), a każda wyjdzie jako własny wpis JSON.
Jak tego używać
Trzy kroki. Działa tak samo dla pojedynczego case class, jak i dla całego pliku modeli.
Wklej Scalę (albo zobacz przykład)
Wrzuć Scalę jak stoi do edytora po lewej. case class, hierarchia sealed trait, instancja albo kilka klas — wszystko gra. Kliknij Wczytaj przykład, jeśli wolisz najpierw zobaczyć realny kod.
Zostaw swoje importy, deklarację package i anotacje. Parser ignoruje to, co nie jest danymi. Po szczegóły języka idź na docs.scala-lang.org — to oficjalna referencja.
Klik Konwertuj
Wciśnij zielony przycisk Konwertuj. Narzędzie czyta Scalę, przechodzi każdą klasę i pole i produkuje JSON w jednym przebiegu. Na czas pracy pojawia się krótki wskaźnik ładowania.
Skopiuj JSON
Prawy panel wypełnia się wcięciowanym JSON-em. Wrzuć go do speca ScalaTest, mockowanej odpowiedzi Akka HTTP, fixture'a Play albo dokumentacji API.
Kiedy to faktycznie ratuje
Fixture'y ScalaTest
Potrzebujesz body JSON do stubowania klienta HTTP w teście serwisu Scala. Wklej case class, weź payload, wrzuć do speca.
Payloady HTTP Akka / Play
Zamień case class na JSON, którego byś POST-ował do własnego serwisu. Przydaje się przy szybkich curl-owych testach, kiedy podpinasz nowy endpoint.
Przykładowe wiadomości Kafki
Generuj przykładowe wiadomości JSON dla nowego topicu Kafki wprost z domenowych case classów — żadnych pisanych ręcznie przykładów, które z czasem się rozjadą.
Dokumentacja, która trzyma się kodu
Produkuj przykłady JSON do dokumentacji API bezpośrednio z prawdziwych case classów, żeby dokumenty zostały aktualne, gdy modele się zmieniają.
Częste pytania
Jak serializowane są wartości Option?
Some(x) staje się wartością x; None idzie jako JSON null. Zachowanie zgodne z domyślnym Circe. Jeśli wolisz pomijać klucze przy None, możesz je usunąć później — bezpieczny domyślny wariant trzyma kształt przewidywalny.
A sealed traity i ADT?
Sealed traity z dziećmi case class serializują się per wariant. Popularny wzorzec z discriminatorem ({"type": "OrderPlaced", ...}), którego używają Circe i Play JSON, wchodzi, gdy kilka wariantów dzieli rodzicielski trait — dzięki temu da się zrobić round-trip danych z powrotem do ADT.
Jak obsługuje typy java.time?
Instant, LocalDate, LocalDateTime i ZonedDateTime są serializowane do stringów ISO-8601. Taka konwencja łączy Circe, Play JSON i uPickle — i round-tripuje czysto z powrotem do java.time.
Ogarnia Map, List, Vector, Set?
Tak. List, Seq, Vector i Set lecą jako tablice JSON. Map[String, A] to obiekt JSON — mapy z nie-stringowymi kluczami (Map[Int, A]) wychodzą jako tablice par klucz/wartość, bo JSON wspiera tylko klucze stringowe.
Mogę wkleić cały plik z kilkoma case classami?
Spoko. Każda klasa top-level dostaje własny wpis JSON, zagnieżdżone instancje się rozwijają. Companion objecty, implicit conversions i pomocnicze metody są pomijane — do outputu idą tylko dane.
Czy mój kod jest zapisywany?
Twoja Scala jest wysyłana do backendu do konwersji i nie jest nigdzie trwale zapisywana. Nie logujemy payloadu. Jeśli kod jest wrażliwy, zerknij na niego przed wklejeniem.
Inne narzędzia, które mogą się przydać
Scala do JSON to jeden kawałek. Te pasują do niego dobrze: