Utilia

Walidator JSON Schema

Waliduj dokument JSON względem JSON Schema w przeglądarce. Każdy błąd jest wyświetlany ze ścieżką w dokumencie, słowem kluczowym i ścieżką w schemacie.

Jak sprawdzić JSON ze schematem

  1. Wklej schemat w pole JSON Schema, a dane w pole Dokument JSON albo wybierz gotowy przypadek z listy Przykład.
  2. Zostaw Wersja (draft) na Automatycznie ($schema), aby użyć wersji wskazanej w $schema schematu, albo wymuś draft 4, 7, 2019-09 lub 2020-12.
  3. Walidacja działa podczas pisania; Waliduj uruchamia ją ponownie. Formatuj oba na nowo wcina oba teksty.
  4. Odczytaj wynik: zielony wiersz, gdy dokument jest poprawny, a w przeciwnym razie tabelę błędów.

Jak czytać tabelę błędów

Każdy wiersz to jedna niespełniona reguła:

  • Ścieżka w dokumencie to JSON Pointer do wartości, która nie przeszła walidacji. /roles/1 to drugi element roles, a (korzeń) oznacza cały dokument.
  • Słowo kluczowe to reguła schematu, która nie została spełniona: type, required, minimum, pattern, format, additionalProperties itd.
  • Komunikat wyjaśnia błąd, np. 0 is less than 1. Komunikaty walidatora są po angielsku.
  • Ścieżka w schemacie wskazuje słowo kluczowe w schemacie, np. /properties/id/minimum, dzięki czemu szybko znajdziesz regułę.

Walidacja nie zatrzymuje się na pierwszym problemie: wyświetlane są wszystkie błędy. Gdy właściwość obiektu nie przechodzi walidacji, walidator zgłasza podsumowanie („Property “id” does not match schema”), a po nim dokładną przyczynę. Pokaż tylko najbardziej szczegółowe błędy ukrywa te podsumowania; odznacz tę opcję, aby zobaczyć cały łańcuch. Błędy w anyOf i oneOf są zawsze pokazywane razem ze szczegółowymi błędami każdej gałęzi, bo tylko razem mają sens.

Co jest obsługiwane

  • Drafty: 4, 6 (walidowany regułami draftu 7), 7, 2019-09 i 2020-12, w tym $defs/definitions, lokalne $ref, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties i unevaluatedItems.
  • Formaty: sprawdzane są date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer i relative-json-pointer. Nieznane formaty są ignorowane, na co pozwala specyfikacja.
  • Odwołania: $ref może wskazywać dowolne miejsce w schemacie, także zadeklarowane w nim $id. Zdalne schematy nigdy nie są pobierane; odwołanie do innego adresu URL jest zgłaszane jako nierozwiązane.

To narzędzie waliduje dokumenty względem twojego schematu. Nie sprawdza, czy sam schemat jest zgodny z metaschematem, ale ostrzega przed nieznanymi nazwami w type, takimi jak "strin" czy "int" – częstą literówką, którą walidatory zwykle po cichu ignorują.

Przykłady

  • Profil użytkownika (2020-12): required, długości ciągów, format: email, enum wewnątrz items, uniqueItems i additionalProperties: false.
  • Lista produktów z $ref (draft-07): tablica, której elementy odwołują się do #/definitions/product, z pattern dla kodu SKU i ceną z exclusiveMinimum.
  • Konfiguracja z if/then (2019-09): certyfikat wymagany tylko w trybie HTTPS, oneOf między adresem e-mail a URI oraz limity liczbowe.

Każdy przykład zawiera dokument z celowymi błędami, abyś mógł zobaczyć, jak wyglądają zgłoszenia.

Najczęściej zadawane pytania

Czy moje dane są wysyłane na serwer?

Nie. Schemat i dokument są walidowane w twojej przeglądarce; nic nie trafia na serwer.

Dlaczego $ref w moim schemacie jest „nierozwiązany”?

Walidator zna tylko schemat, który wkleiłeś. Nie może podążyć za $ref do innego pliku lub adresu URL; skopiuj wskazywane definicje do $defs i odwołuj się do #/$defs/….

Którego draftu użyć?

Tego, który obsługuje twój projekt – i zadeklaruj go w $schema. Dla nowych schematów aktualną wersją jest 2020-12; używa jej też OpenAPI 3.1.

Dlaczego integer odrzuca 2.0?

Nie odrzuca: JSON Schema traktuje 2.0 jako liczbę całkowitą, bo jej wartość jest całkowita. Regułę "type": "integer" nie przejdzie natomiast 2.5.

Czy działa offline?

Tak. Gdy strona się wczyta i uruchomisz pierwszą walidację (która wczytuje walidator), połączenie nie jest już potrzebne.