Generator schematów JSON

Wklej jeden lub kilka przykładów JSON, a generator wywnioskuje schemat JSON, którego możesz użyć do walidacji nowych ładunków. Wykrywa typy, oznacza pola jako wymagane, gdy występują w każdym przykładzie, wnioskuje wyliczenia (enum), gdy wartości pochodzą z małego, zamkniętego zbioru, oraz tworzy wynik zgodny ze schematem JSON draft 2020-12.

Jak wygenerować schemat JSON

  1. 1

    Wklej przykładowe dokumenty

    Jeden lub kilka rzeczywistych ładunków; im większa różnorodność, tym dokładniejszy wywnioskowany schemat.

  2. 2

    Wybierz draft

    draft 2020-12 (obecny), draft 07 (szeroko wspierany) lub draft 04 (dla starszego OpenAPI).

  3. 3

    Dostrój wnioskowanie

    Włączanie/wyłączanie wnioskowania enum, strategia pól wymaganych (część wspólna lub suma zbiorów) oraz decyzja, czy oznaczać wszystkie pola jako `required`, gdy podano tylko jedną próbkę.

  4. 4

    Generuj

    Schemat jest generowany z `$schema`, `title`, `type`, `properties` oraz zagnieżdżonymi `$ref` dla powtarzających się podobiektów.

Co wnioskowanie robi dobrze

  • Typy: string, number, integer, boolean, null, array, object.
  • Możliwość wartości null: pole, które w jednej próbce ma wartość null, a w innej jest ciągiem znaków, staje się ["string", "null"].
  • Elementy tablicy: tablice jednorodne tworzą pojedynczy schemat items; tablice niejednorodne tworzą prefixItems.
  • Wyliczenia (enum): jeśli wszystkie zaobserwowane wartości pochodzą z małego zbioru (konfigurowalne, domyślnie 10 różnych wartości), generowany jest enum.
  • Wymagane: przy wielu próbkach część wspólna kluczy staje się required; przy jednej próbce wszystkie klucze są wymagane, chyba że z tego zrezygnujesz.
  • Formaty: ciągi zgodne z datami ISO-8601, adresami e-mail lub URI otrzymują wywnioskowany format.

Czego wnioskowanie nie może wiedzieć

  • Zamiar a przykład: próbka age: 25 wnioskuje type: integer, ale nie może wiedzieć, że akceptujesz również null. Podaj kilka próbek obejmujących przypadki brzegowe.
  • Ograniczenia: minLength, maximum, pattern, musisz dodać je ręcznie. Wnioskowanie nie zgaduje granic na podstawie próbek.
  • Logika biznesowa: warunek “dokładnie jedno z tych trzech pól musi być ustawione” wymaga oneOf, nie da się go wywnioskować.
  • Referencje: generator tworzy płaski schemat. Jeśli chcesz wydzielić powtarzające się struktury do $defs, zrób to po wygenerowaniu.

Przykładowe wyjście

Z pojedynczej próbki:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Wywnioskowany schemat (draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Najczęstsze błędy

  • Wnioskowanie z jednej próbki. Schemat będzie przeuczony, każde pole staje się wymagane, bez tolerancji dla null. Zawsze podawaj co najmniej 5–10 różnorodnych próbek.
  • Użycie integer, gdy chodziło o number. Jeśli którakolwiek próbka zawiera liczbę dziesiętną, wywnioskowany typ staje się number; jeśli wszystkie są całkowite, staje się integer. Dla pól, które mogą być jednym lub drugim, dołącz próbkę z liczbą dziesiętną.
  • Pominięcie pól opcjonalnych. Pole obecne w 4 z 5 próbek, ale brakujące w 1, staje się opcjonalne, zgodnie z zamierzeniem. Jeśli wszystkie 5 próbek przypadkiem je zawiera, schemat oznaczy je jako wymagane, mimo że w Twoim API jest ono w rzeczywistości opcjonalne.

Najczęściej zadawane pytania

Im więcej, tym lepiej, ale zwykle 5–10 różnorodnych próbek daje sensowny schemat. Przy jednej próbce każde pole staje się wymagane, a możliwości wartości null nie da się wywnioskować, jeśli to możliwe, zawsze podawaj kilka wariantów.

Domyślnie draft 2020-12. Drafty 07 i 04 są dostępne dla zgodności z OpenAPI 3.0 (które używa podzbioru draftu 05/07).

Nie. Wnioskowanie ograniczeń z próbek prowadziłoby do przeuczenia schematu. Dodaj minLength, maximum, pattern itd. ręcznie po wygenerowaniu, zgodnie z Twoimi regułami biznesowymi.

Tak. Jeśli wkleisz tablicę JSON, generator traktuje każdy element jako osobną próbkę i tworzy schemat opisujący pojedynczy element, a nie zewnętrzną tablicę. Włącz opcję „traktuj jako kontener tablicy”, jeśli chcesz uzyskać kształt samej zewnętrznej tablicy.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach