Konwerter JSON na klasy case class w Scala — Numio
Zamienia próbkę JSON na klasy case class Scala. Zagnieżdżone obiekty stają się osobnymi klasami case class, a tablice Seq[...]; wartości null i klucze brakujące w części elementów tablicy stają się Option[...].
Tworzenie modeli dla JSON API przed dodaniem kodeka Circe, Play JSON lub uPickle.
JSON
Scala Case Class
Kiedy go używać
- Tworzenie modeli dla JSON API przed dodaniem kodeka Circe, Play JSON lub uPickle.
- Przekształcanie przykładowego ładunku Kafka lub HTTP w klasy przypadków dla zadania Spark lub Akka.
Jak używać
- Wklej obiekt JSON; w przypadku pól opcjonalnych należy uwzględnić kilka elementów tablicy z różnymi kluczami.
- Sprawdź wynik: klasa główna to RootInterface, a nazwy klas zagnieżdżonych pochodzą z ich kluczy w PascalCase (głośniki stają się głośnikami).
- Skopiuj klasy, zmień ich nazwy i zawęź dowolną opcję Option[Any] lub Seq[Any], której próbka nie mogła wpisać.
Wejście JSON
{
"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" }
]
}Klasy przypadków w Scali
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] )
Szczegóły i ograniczenia
Działa w przeglądarce z własnym generatorem witryny; brak połączenia z serwerem. Strona nie ma żadnych ustawień i nie dodaje żadnych importów ani wyprowadzeń kodeków.
Wszystkie elementy tablicy są łączone: klucz brakujący w części elementów lub zawierający null w części z nich staje się Option[...], a 12 obok 1.5 staje się Double.
Wartość, która zawsze jest równa null, daje opcję Option[Any] i pustą tablicę Seq[Any], ponieważ próbka nie ma typu do pokazania.
Zarezerwowane słowa i klucze, które nie są identyfikatorami, są zawijane w backticki, takie jak `type`; Klucze snake_case pozostają zapisane.
FAQ
Czy pola dopuszczające null otrzymują Option?
Tak. Klucz o wartości null staje się Option[...], z typem wywnioskowanym z innych próbek, jeśli zawierają rzeczywiste wartości; w przeciwnym razie Option[Any]. Klucze brakujące w części elementów tablicy również otrzymują Option.
Co się dzieje z tablicą JSON w katalogu głównym?
Elementy są łączone w jedną klasę case class RootInterface, klucze brakujące w części elementów otrzymują Option i dodawany jest type RootInterfaceList = Seq[RootInterface].
Czy 64-bitowy ID otrzymuje typ Long?
Tylko gdy wartość przykładowa przekracza zakres Int (około ±2.1 miliarda). Pozostałe liczby całkowite stają się Int, dlatego zmień identyfikatory lub znaczniki czasu na Long, jeśli mogą rosnąć.