Utilia

Validator JSON Schema

Validează un document JSON în raport cu o schemă JSON Schema, în browser. Fiecare eroare este listată cu calea din document, cuvântul cheie și calea din schemă.

Cum validezi JSON în raport cu o schemă

  1. Lipește schema în JSON Schema și datele în Document JSON sau alege un caz gata făcut din Exemplu.
  2. Lasă Versiune (draft) pe Automată ($schema) pentru a folosi versiunea indicată de $schema din schemă, sau forțează draftul 4, 7, 2019-09 ori 2020-12.
  3. Validarea rulează pe măsură ce scrii; Validează o rulează din nou. Formatează ambele reindentează cele două texte.
  4. Citește rezultatul: o linie verde când documentul este valid, altfel un tabel cu erori.

Mesajele de eroare ale validatorului sunt în engleză; restul interfeței este în română.

Cum citești tabelul de erori

Fiecare rând este o regulă încălcată:

  • Calea din document este un JSON Pointer către valoarea care a eșuat. /roles/1 este al doilea element din roles; (rădăcină) este întregul document.
  • Cuvânt cheie este regula din schemă care a eșuat: type, required, minimum, pattern, format, additionalProperties și așa mai departe.
  • Mesaj explică eșecul, de exemplu 0 is less than 1.
  • Calea din schemă indică cuvântul cheie din interiorul schemei, de exemplu /properties/id/minimum, ca să găsești rapid regula.

Validarea nu se oprește la prima problemă: toate erorile sunt listate. Când o proprietate a unui obiect eșuează, validatorul raportează un rezumat („Property “id” does not match schema”), urmat de motivul precis. Arată doar erorile cele mai specifice ascunde aceste rezumate; debifează opțiunea pentru a vedea lanțul complet. Erorile de sub anyOf și oneOf sunt păstrate întotdeauna împreună cu erorile specifice ale fiecărei ramuri, pentru că au sens doar împreună.

Ce este acceptat

  • Versiuni: 4, 6 (validată cu regulile draftului 7), 7, 2019-09 și 2020-12, inclusiv $defs/definitions, $ref local, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties și unevaluatedItems.
  • Formate: sunt verificate date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer și relative-json-pointer. Formatele necunoscute sunt ignorate, așa cum permite specificația.
  • Referințe: $ref poate indica oriunde în schemă, inclusiv către un $id declarat de ea. Schemele de la distanță nu sunt descărcate niciodată; o referință către alt URL este raportată ca nerezolvată.

Instrumentul validează documente în raport cu schema ta. Nu verifică dacă schema însăși respectă meta-schema, dar te avertizează în privința numelor de type necunoscute, precum "strin" sau "int", o greșeală de tastare frecventă pe care validatoarele altfel o ignoră în tăcere.

Exemplele

  • Profil de utilizator (2020-12): required, lungimi de șiruri, format: email, un enum în items, uniqueItems și additionalProperties: false.
  • Listă de produse cu $ref (draft-07): o listă ale cărei elemente fac referire la #/definitions/product, cu un pattern pentru SKU și un preț cu exclusiveMinimum.
  • Configurație cu if/then (2019-09): un certificat cerut doar în modul HTTPS, un oneOf între e-mail și URI și limite numerice.

Fiecare exemplu vine cu un document care conține greșeli intenționate, ca să vezi cum arată erorile.

Întrebări frecvente

Sunt datele mele încărcate?

Nu. Schema și documentul sunt validate în browserul tău; nimic nu este trimis către un server.

De ce `$ref` din schema mea este „nerezolvat”?

Validatorul cunoaște doar schema pe care ai lipit-o. Un $ref către alt fișier sau alt URL nu poate fi urmat; copiază definițiile referite în $defs și indică în schimb #/$defs/….

Ce versiune (draft) ar trebui să folosesc?

Folosește-o pe cea vizată de proiectul tău și declară-o cu $schema. Pentru scheme noi, 2020-12 este versiunea curentă; o folosește și OpenAPI 3.1.

De ce integer respinge 2.0?

Nu o respinge: JSON Schema tratează 2.0 ca număr întreg, deoarece valoarea lui este întreagă. 2.5 nu trece de "type": "integer".

Funcționează offline?

Da. După ce pagina s-a încărcat și ai rulat o primă validare (care încarcă validatorul), nu mai este nevoie de conexiune.