Przejdź do treści

Konwertuj JSON na typy TypeScript, Go, Python i inne

Wklej przykładowe dane JSON i wygeneruj w przeglądarce interfejsy TypeScript, schematy Zod, struktury Go oraz typy dla języków Python, Java, C#, Kotlin, Swift i Rust.

Kilka próbek (jedna po drugiej lub JSON Lines) oraz obiekty w tablicach są łączone: klucze, których gdzieś brakuje, stają się opcjonalne, a wartości null – dopuszczają null.

TypeScript
Wklej próbkę i kliknij Generuj typy.
Zadeklaruj jako
Działa w przeglądarce · bez przesyłania na serwerJak to działa

Jak korzystać: JSON na typy

  1. 1

    Wklej próbki JSON

    Wklej jedną odpowiedź, tablicę rekordów lub kilka odpowiedzi jedna po drugiej; przykład pokazuje dwóch scalonych użytkowników.

  2. 2

    Wybierz język

    Wybierz TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift lub Rust oraz opcje stylu dla tego języka.

  3. 3

    Nazwij typ główny

    Ustaw nazwę typu najwyższego poziomu, na przykład User lub OrderResponse.

  4. 4

    Generuj i skopiuj

    Kliknij Generuj typy, a potem skopiuj kod lub go pobierz; po zmianach kod generuje się ponownie automatycznie.

Limity i Pro

Za darmo i bez rejestracji: 9 języków wyjściowych z 3 stylami Pythona, dowolna liczba scalanych próbek i pliki do 20 MB, a generowanie zostaje przerwane po 30 sekundach.

Pro usuwa reklamy; generator działa tak samo w każdym planie. Zobacz Pro

O narzędziu: JSON na typy

Ręczne pisanie typów dla odpowiedzi API jest wolne i łatwo o błąd, zwłaszcza gdy dane są zagnieżdżone na trzech poziomach. Wklej jedną lub kilka próbek JSON, a generator rozpozna strukturę i napisze gotowe do wklejenia definicje w dziewięciu odmianach: interfejsy lub aliasy typów TypeScript, TypeScript ze schematami Zod do walidacji w czasie działania, struktury Go z tagami json, klasy dataclass, TypedDict lub modele Pydantic v2 w Pythonie, rekordy Javy z adnotacjami Jackson, klasy C# dla System.Text.Json, klasy danych Kotlina dla kotlinx.serialization, struktury Codable w Swifcie oraz struktury Rusta dla serde.

Jedna próbka rzadko pokazuje wszystkie pola, dlatego generator scala tyle próbek, ile mu podasz. Możesz wkleić kilka dokumentów jeden po drugim, w formacie JSON Lines albo jako tablicę obiektów. Klucz, którego brakuje w części obiektów, staje się opcjonalny, klucz czasem równy null – dopuszcza wartość null, liczba całkowita, która bywa ułamkiem, zmienia się w liczbę zmiennoprzecinkową, a naprawdę mieszane wartości dają typ unii albo dynamiczny typ JSON danego języka. Obiekty zagnieżdżone dostają własne nazwane typy – orders zamienia się w Order, addresses w Address – a identyczne kształty są generowane raz i używane ponownie. Obiekty, których kluczami są liczby, UUID-y lub daty, zamieniane są na mapy.

Nazwy pól są dostosowywane do konwencji każdego języka, a klucze JSON, które się różnią, jak first-name czy class, są odwzorowywane z odpowiednią adnotacją, aliasem lub CodingKeys. Komentarze i końcowe przecinki w próbce nie przeszkadzają.

Wynik opisuje podane próbki. Generator nie może znać pól ani wartości, których w nich nie ma, więc zanim na nim polegasz, sprawdź go z dokumentacją API.

Prywatność

Próbki są analizowane, a kod generowany przez Web Worker w tej karcie, więc odpowiedzi API z danymi osobowymi lub wewnętrznymi nie są nigdzie przesyłane. Opcje języka i nazewnictwa zapisują się w pamięci lokalnej przeglądarki, a wklejony JSON nie jest przechowywany.

Funkcje

Scala wiele próbek

Brakujące klucze stają się opcjonalne, a wartości null dopuszczalne we wszystkich wklejonych próbkach.

9 języków

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift i Rust z nazwami zgodnymi z konwencją danego języka.

Odwzorowanie kluczy

Tagi json, aliasy, @SerialName, @JsonProperty i CodingKeys zachowują oryginalne nazwy z JSON.

JSON na typy: najczęstsze pytania

Jak generator ustala, które pola są opcjonalne?
Pole jest opcjonalne, gdy przynajmniej w jednym obiekcie w tym miejscu brakuje klucza. Jeśli wkleisz pojedynczy obiekt, wszystkie pola są wymagane, bo nic nie wskazuje inaczej. Wklej kilka prawdziwych odpowiedzi lub tablicę rekordów, by generator zobaczył, które klucze się pojawiają, a które nie. Opcja Wszystkie pola opcjonalne przydaje się przy danych częściowych lub w żądaniach patch.
Co się dzieje, gdy wartość bywa równa null?
Pole dopuszcza wartość null: string | null w TypeScripcie, wskaźnik w Go, str | None w Pythonie, String? w Kotlinie i Swifcie, Option<String> w Ruście oraz typ opakowany lub nullable w Javie i C#. Pole, które w każdej próbce ma null, nie ma typu do rozpoznania, więc dostaje nieznany lub dynamiczny typ JSON danego języka.
Dlaczego moje liczby całkowite zmieniły się w zmiennoprzecinkowe?
Jeśli w jednej próbce pole ma wartość 7, a w innej 7.5, typ musi pomieścić obie, więc staje się typem float lub double. Liczby zapisane z kropką dziesiętną, jak 10.0, też liczą się jako ułamki. W TypeScripcie oba przypadki to number, a w Zod pole tylko z liczbami całkowitymi jest sprawdzane przez z.number().int().
Czy to to samo co quicktype?
Rozwiązuje ten sam problem własnym generatorem, który działa w całości w przeglądarce i dodaje kilka rzeczy: trzy style Pythona w tym TypedDict, schematy Zod oraz scalanie kilku wklejonych dokumentów. quicktype obsługuje więcej języków i potrafi czytać JSON Schema. Dla dziewięciu języków tutaj wynik ma się kompilować bez dodatkowych bibliotek pomocniczych.
Czy rozpoznaje daty, enumy lub UUID-y?
Nie. Ciągi znaków pozostają ciągami, bo kilka próbek nie dowodzi, że każda przyszła wartość będzie datą albo jedną z ustalonego zbioru. Zmień wygenerowany typ ręcznie na Date, time.Time, datetime, enum lub typ UUID tam, gdzie API to gwarantuje. Wyjątkiem są obiekty z kluczami w postaci UUID-ów, liczb lub dat: zamieniane są na mapy.