Validirati sintaksu JSON-a

provjerava sintaksu JSON niza i naznačuje redak i stupac prve pogreške

Za što se koristi JSON validator?

Validator JSON-a ima skromniju, ali precizniju ulogu od formatera: ne prepisuje ništa. Uzima niz i odgovara na binarno pitanje: je li ovaj tekst usklađen s JSON-om? RFC 8259? Ako da, alat vraća kontrolu. Ako nije, označava točno redak, stupac i isječak JSON-a oko problema, kako bismo pomogli programeru da ga odmah riješi.

U praksi, to je alat koji koristimo čim parser negdje vrati poruku o pogrešci zagonetan poput SyntaxError: Unexpected token } u JSON-u na poziciji 217. Radije nego prebrojite znakove rukom u uređivaču, zalijepite cijeli niz, pročitajte poziciju i vidite uvredljivi ekstrakt.

Validacija, formatiranje: dvije različite operacije

Često brkamo to dvoje. Naš JSON format uzima važeći JSON i prepisuje ga s čitljivim uvlačenjem. Validator je zadovoljan sintaktičkom presudom. on ne provodi semantičku provjeru valjanosti: ne zna je li vrijednost email polja izgleda kao e-pošta, niti ako struktura odgovara JSON shemi. Za ovo koristimo namjenski alati (ajv u Nodeu, justinrainbow/json-schema u PHP-u).

Klasični slijed u otklanjanju pogrešaka je: prvo potvrdi (alat ukazuje na grešku u sintaksi), format zatim (sada važeći sadržaj postaje čitljiv), usporedite konačno s drugi referentni sadržaj putem našeg JSON komparatora.

Najčešće JSON greške

  • Zarez na kraju: {"a": 1, "b": 2,}. Tolerirano od strane JavaScript, ECMAScript i JSON5; odbijen čistim JSON-om. Ovo je pogreška broj 1 kod kopiranja i lijepljenja s uređivač koda.
  • Apostrofi umjesto dvostrukih navodnika: {'a': 1} nije valjan. JSON prihvaća samo dvostruke navodnike oko ključeva i vrijednosti niza.
  • Ključevi bez navodnika: {a: 1}, važeća JavaScript sintaksa, ali nevažeći JSON.
  • Kontrolni znakovi bez izlaza u nizu: neobrađeni novi red, a tabeliranje. JSON zahtijeva , , .
  • Komentari: // komentar ili /* */. Prihvaćeno u JSONC-u (config VS Code) ili JSON5, odbijeno u čistom JSON-u.
  • Netočno kodiranje: UTF-8 BOM na početku datoteke, netočan sadržaj Latin-1 pretvoreni. Validator često vraća generičku poruku za ove slučajeve.
  • Nedovršena struktura: { ili [ bez zatvarača, uobičajeno kada skratite korisni teret prilikom kopiranja i lijepljenja.

Kako validator locira pogrešku

Alat koristi PHP-ov json_decode() s oznakom JSON_THROW_ON_ERROR. PHP vraća poruku koja sadrži poziciju u bajtovima (pozicija 217), koju pretvaramo u par redak/stupac brojeći prijelome redaka prije pomaka. Isječak od približno 80 znakova je zatim izrežite položaj kako biste dali kontekst. To je općenito dovoljno za identifikaciju pogreška: krivo postavljen citat, dodatni zarez, nedostajuća zagrada.

Upozorenje: pozicija koju prijavljuje PHP nije uvijek uvredljivi karakter. Ona je često nakon greške, kada parser odustane. Ako isječak prikazuje "name": "Alice", }, stvarna pogreška je zarez, a ne vitičasta vitičica.

Tipični slučajevi upotrebe

  • Oštećena konfiguracija: composer.json, package.json, tsconfig.json koji sprječava pokretanje izgradnje. Zalijepimo, vidimo liniju, ispravimo.
  • Skraćeni API odgovor: Proxy je smanjio korisni teret. Struktura nije završena, validator to prijavljuje.
  • Webhook Payload: Usluga treće strane šalje neispravan JSON. Validator dopušta kako biste uočili problem na strani pošiljatelja bez poniranja u kod aplikacije.
  • JSON konstruiran ulančavanjem: praksa koju treba izbjegavati, ali uobičajena, posebno u bashu ili u SQL-u. Validator otkriva neizbježne dvostruke navodnike.

Ograničenja alata

Validator ne provjerava valjanost prema shemi. Ne kaže da mu nedostaje teren e-mail, da vrijednost nije cijeli broj ili da očekivani niz nema točnu duljinu. Za ove strukturne provjere koristimo JSON shemu. Validator također ne ispravlja JSON: ne pokušava dodati zagradu koja nedostaje niti ukloniti dodatni zarez. To je izbor : automatsko ispravljanje prečesto skriva stvarne pogreške.

Često postavljana pitanja

Koja je razlika s linterom?

Linter ide dalje: također provjerava pravila stila (abeceda, konvencije imenovanja), otkriva duplicirane vrijednosti, predlaže poboljšanja. Validator ostaje usklađen sintaktičkom.

Moj JSON je valjan, ali ga moja aplikacija odbija?

Provjerite kodiranje (UTF-8 bez BOM-a), ograničenje veličine na strani poslužitelja, očekivane vrste. JSON sintaktički ispravan možda i dalje ne odgovara shemi aplikacije.

Čuva li validator moj JSON?

Ne. Obrada je sinkrona na strani poslužitelja, bez postojanosti. Za vrlo osjetljive podatke, i dalje preferiraju lokalnu provjeru putem jq ili PHP skripte.

Primjer zahtjeva

curl -X POST https://cdrn.fr/api/v1/tools/json-validator/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Ulazna shema

Polje Tip Obavezno Zadano
input text

Krajnje točke

  • GET https://cdrn.fr/api/v1/tools - ispisuje sve dostupne alate
  • GET https://cdrn.fr/api/v1/tools/json-validator - dohvaća shemu ovog alata
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - izvršava ovaj alat s JSON payloadom