Przejdź do treści

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ć

  1. Wklej obiekt JSON; w przypadku pól opcjonalnych należy uwzględnić kilka elementów tablicy z różnymi kluczami.
  2. 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).
  3. 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ąć.

Specyfikacje i referencje