Walidator JSON Schema

Wklej schemat i dokument, wybierz draft, a walidator sprawdzi dokument względem każdego słowa kluczowego, którego używa Twój schemat, type, required, enum, oneOf, $ref, if/then/else, własny format, raportując każde naruszenie wskaźnikiem w stylu JSONPath do dokładnej problematycznej lokalizacji.

Jak walidować względem schematu

  1. 1

    Wklej schemat

    JSON Schema draft 04, 07 albo 2020-12. Słowo kluczowe `$schema` (jeśli obecne) automatycznie wybiera draft.

  2. 2

    Wklej dokument

    JSON, który chcesz zwalidować. Musi najpierw być poprawnym JSON-em: błędy składni są pokazywane przed ewaluacją schematu.

  3. 3

    Waliduj

    Każde naruszenie jest raportowane ze wskaźnikiem JSON (`/user/email`) i niespełnionym słowem kluczowym (`format`, `required` itd.).

  4. 4

    Popraw i zwaliduj ponownie

    Edytuj którąkolwiek stronę, a status aktualizuje się na żywo.

Obsługiwane słowa kluczowe

Rdzeń: type, enum, const, multipleOf, maximum, minimum, exclusiveMaximum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, maxContains, minContains, maxProperties, minProperties, required, dependentRequired.

Kompozycja: allOf, anyOf, oneOf, not.

Aplikatory: properties, patternProperties, additionalProperties, items, prefixItems, contains, propertyNames.

Warunki: if, then, else, dependentSchemas.

Odwołania: $ref, $defs, $id, $anchor.

Formaty (z walidacją po włączeniu): date-time, date, time, duration, email, hostname, ipv4, ipv6, uri, uuid, regex.

Wynik błędu

FAIL  /user/email        format            "not-an-email" is not a valid "email"
FAIL  /user/age          minimum           -3 is less than the minimum 0
FAIL  /orders/0/total    type              "42" is not of type "number"
FAIL  /                  required          missing required property "shippingAddress"

Każdy błąd zawiera ścieżkę i słowo kluczowe, które zawiodło, co czyni szybkim zlokalizowanie go w edytorze.

Różnice między draftami, które gryzą

Słowo kluczowe Draft 04 Draft 07 Draft 2020-12
id vs $id id $id $id
exclusiveMaximum jako bool Tak Liczba Liczba
Składnia tablicy items items items prefixItems
$ref dopuszcza rodzeństwo Nie Nie Tak

Ustaw właściwy draft; walidacja schematu draft-04 jako 2020-12 błędnie zinterpretuje id i kilka innych subtelności.

Typowe przepływy pracy

  • Testowanie kontraktu API: przed wdrożeniem uruchom wygenerowany/zaktualizowany schemat OpenAPI względem rzeczywistych przykładowych odpowiedzi.
  • Utwardzanie konfiguracji: waliduj każdą konfigurację YAML/JSON w CI względem schematu przed scaleniem.
  • Wczytywanie danych: wcześnie odrzucaj ładunki, które nie pasują do oczekiwanego kształtu, z jasnym komunikatem błędu.

Częste błędy

  • Zapominanie o egzekwowaniu format. Domyślnie większość walidatorów traktuje nieznane formaty tylko jako adnotację. Włącz walidację strict-format, aby faktycznie odrzucać błędne e-maile i daty.
  • Nadużywanie oneOf. Jeśli dwie gałęzie oneOf się nakładają, dokument zawiedzie (musi pasować dokładnie do jednej). Użyj anyOf albo wzorców z dyskryminatorem.
  • Ciasne schematy z additionalProperties: false. Dodanie nowego opcjonalnego pola staje się zmianą łamiącą. Pomiń je, chyba że naprawdę chcesz obiektu zamkniętego.

Najczęściej zadawane pytania

Tak. Draft 2020-12, 07 i 04 są obsługiwane. Walidator odczytuje słowo kluczowe $schema z Twojego dokumentu, aby wybrać właściwy, albo wraca do selektora w interfejsie.

Standardowe formaty (email, date-time, uuid, ipv4 itd.) są walidowane, gdy strict-format jest włączony. Własne formaty zadeklarowane w Twoim schemacie są traktowane tylko jako adnotacja, chyba że dostarczysz regex przez pattern.

Odwołania wewnętrzne (#/$defs/foo) są rozwiązywane automatycznie. Zewnętrzne odwołania HTTP nie są domyślnie pobierane, ze względów bezpieczeństwa. Najpierw wstaw inline swoje zewnętrzne odwołania albo użyj dedykowanego narzędzia wspierającego rozwiązywanie zdalnych $ref.

Tak. Zarówno schemat, jak i dokument pozostają lokalne. Wklejona treść nigdy nie jest wysyłana, bezpieczne dla wewnętrznych kontraktów API i wrażliwych danych.

Powiązane narzędzia

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