Przejdź do treści

Konwerter JSON na klasy danych Kotlin — Numio

Generuje klasy danych Kotlin z próbki JSON. Liczby całkowite stają się Long, dziesiętne Double, zagnieżdżone obiekty otrzymują własną klasę, a klucze brakujące w części elementów tablicy stają się typami dopuszczającymi null, np. Boolean?.

Modelowanie odpowiedzi REST dla aplikacji na Androida, która analizuje JSON za pomocą Jacksona.

JSON

Kiedy go używać

  • Modelowanie odpowiedzi REST dla aplikacji na Androida, która analizuje JSON za pomocą Jacksona.
  • Tworzenie DTO dla usługi Ktor lub Spring Boot na podstawie przykładowego ładunku.

Jak używać

  1. Wklej reprezentatywny obiekt lub tablicę JSON do edytora JSON; zawierać elementy tablicy, które pokazują opcjonalne klucze.
  2. Przeczytaj panel Kotlina: klasa najwyższego poziomu nosi nazwę Root, a nazwy klas zagnieżdżonych pochodzą z ich kluczy (projekty stają się Projektami).
  3. Skopiuj klasy, zmień nazwę Root i zastąp Any? lub Long, jeśli kontrakt API wymaga innego typu.

Wejście JSON

{
  "id": 1024,
  "full_name": "Ada Lovelace",
  "email": null,
  "roles": ["admin", "editor"],
  "projects": [
    { "name": "Engine", "stars": 42 },
    { "name": "Notes", "stars": 7, "archived": true }
  ]
}

Klasy danych Kotlina

import com.fasterxml.jackson.annotation.JsonProperty

data class Root(
    val id: Long,
    @JsonProperty("full_name")
    val fullName: String,
    val email: Any?,
    val roles: List<String>,
    val projects: List<Project>,
)

data class Project(
    val name: String,
    val stars: Long,
    val archived: Boolean?,
)

Szczegóły i ograniczenia

Konwersja przebiega w Twojej przeglądarce za pomocą modułu json_typegen WebAssembly; JSON nie został przesłany. Na tej stronie nie ma żadnych ustawień.

Klucze inne niż camelCase otrzymują adnotację Jackson @JsonProperty i import com.fasterxml.jackson.annotation.JsonProperty. Adnotacje kotlinx.serialization lub Moshi nie są generowane.

Wartości null i puste tablice nie niosą informacji o typie, więc stają się Any? i Lista<Any?>.

Pola dopuszczające wartość null nie mają wartości domyślnej (= null). Dodaj wartości domyślne samodzielnie, jeśli pole może być nieobecne podczas deserializacji.

FAQ

Dlaczego liczba całkowita jest wpisana jako Long zamiast Int?

Generator zawsze używa Long dla liczb całkowitych, więc duże identyfikatory nie przepełniają się. Liczby zbyt duże dla 64-bitowej liczby całkowitej lub zapisane z przecinkiem dziesiętnym stają się Double.

Czy mogę przekonwertować tablicę JSON w katalogu głównym?

Tak. Tablica główna tworzy alias typu, na przykład typealias Root = List<Root2>;, plus klasę danych Root2 dla typu elementu. Zmień nazwę obu, aby pasowały do ​​kodu.

Dlaczego krótka tablica mieszana stała się Pair<Long, String>?

json_typegen traktuje krótką tablicę, której elementy mają różne typy, jako krotkę, więc [1, "a"] staje się Pair<Long, String>. Zmień go na List<Any>, jeśli tablica jest w rzeczywistości listą.

Specyfikacje i referencje