Validirati sintakso JSON-a

preveri sintakso JSON niza in navaja vrstico in stolpec prve napake

Za kaj se uporablja validator JSON?

Preverjevalnik JSON ima skromnejšo, a natančnejšo vlogo kot oblikovalnik: ne prepisuje nič. Vzame niz in odgovori na binarno vprašanje: ali je to besedilo skladno z JSON? RFC 8259? Če da, orodje vrne nadzor. Če ni, označuje natančno vrstico, stolpec in izvleček JSON okoli težave, da bi razvijalcu pomagali, da jo takoj odpravi.

V praksi je to orodje, ki ga uporabimo takoj, ko razčlenjevalnik nekje vrne sporočilo o napaki skrivnostno, kot je SyntaxError: Unexpected token } v JSON na položaju 217. Raje kot ročno preštejte znake v urejevalniku, prilepite celoten niz, preberite položaj in poglejte žaljivi izvleček.

Preverjanje, oblikovanje: dve različni operaciji

To dvoje pogosto zamenjujemo. Naš oblikovalnik JSON sprejema veljaven JSON in prepiše z berljivim zamikom. Preverjevalnik je zadovoljen s sintaktično sodbo. On ne izvaja semantičnega preverjanja: ne ve, ali je vrednost polja email izgleda kot e-pošta, niti če se struktura ujema s shemo JSON. Za to uporabljamo namenska orodja (ajv v Node, justinrainbow/json-schema v PHP).

Klasično zaporedje pri odpravljanju napak je: najprej preveri (orodje pokaže sintaktično napako), format nato (zdaj veljavna vsebina postane berljiva), končno primerjaj z drugo referenčno vsebino prek našega primerjalnika JSON.

Najpogostejše napake JSON

  • Končna vejica: {"a": 1, "b": 2,}. Tolerira JavaScript, ECMAScript in JSON5; zavrnil čisti JSON. To je napaka št. 1 pri kopiranju in lepljenju iz urejevalnik kode.
  • Apostrofi namesto dvojnih narekovajev: {'a': 1} ni veljaven. JSON sprejema samo dvojne narekovaje okoli ključev in vrednosti nizov.
  • Ključi brez narekovajev: {a: 1}, veljavna sintaksa JavaScript, vendar neveljaven JSON.
  • Neubežni kontrolni znaki v nizu: neobdelana nova vrstica, a tabeliranje. JSON zahteva , , .
  • Komentarji: // komentar ali /* */. Sprejeto v JSONC (config VS Code) ali JSON5, zavrnjen v čistem JSON.
  • Nepravilno kodiranje: UTF-8 BOM na začetku datoteke, nepravilna vsebina Latin-1 pretvorjen. Validator za te primere pogosto vrne generično sporočilo.
  • Nedokončana struktura: { ali [ brez zaključka, pogosto ko pri kopiranju in lepljenju obrežete koristni tovor.

Kako validator najde napako

Orodje uporablja PHP json_decode() z zastavico JSON_THROW_ON_ERROR. PHP vrne sporočilo, ki vsebuje položaj v bajtih (položaj 217), ki ga pretvorimo v par vrstica/stolpec s štetjem prelomov vrstic pred odmikom. Izvleček s približno 80 znaki je nato odrežite položaj, da zagotovite kontekst. To na splošno zadostuje za identifikacijo napaka: napačno postavljen narekovaj, dodatna vejica, manjkajoči oklepaj.

Opozorilo: položaj, ki ga poroča PHP, ni vedno ravno žaljiv. Ona je pogosto po napaki, ko je razčlenjevalnik obupal. Če delček prikazuje "name": "Alice", }, dejanska napaka je vejica, ne oklepaj.

Tipični primeri uporabe

  • Poškodovana konfiguracija: composer.json, package.json, tsconfig.json, ki preprečuje zagon gradnje. Prilepimo, vidimo črto, popravimo.
  • Skrajšan odziv API-ja: strežnik proxy zmanjša obremenitev. Struktura ni dokončana, validator to sporoči.
  • Webhook Payload: storitev tretje osebe pošlje napačno oblikovan JSON. Validator omogoča da opazite težavo na strani pošiljatelja, ne da bi se poglobili v kodo aplikacije.
  • JSON, sestavljen z veriženjem: praksa, ki se ji je treba izogibati, vendar pogosta, zlasti v bashu ali v SQL. Preverjevalnik razkrije neubežne dvojne narekovaje.

Omejitve orodja

Validator ne preverja glede na shemo. Ne pravi, da pogreša igrišče email, da vrednost ni celo število ali da pričakovana matrika nima pravilne dolžine. Za te strukturne preglede uporabljamo shemo JSON. Validator prav tako ne popravi JSON: ne poskuša dodati manjkajočega oklepaja ali odstraniti dodatne vejice. To je izbira : samodejni popravek prepogosto skrije resnične napake.

Pogosta vprašanja

Kakšna je razlika z linterjem?

Linter gre še dlje: preveri tudi stilska pravila (abeceda, pravila poimenovanja), zazna podvojene vrednosti, predlaga izboljšave. Validator ostaja skladen sintaktični.

Moj JSON je veljaven, vendar ga moja aplikacija zavrne?

Preverite kodiranje (UTF-8 brez BOM), omejitev velikosti na strani strežnika, pričakovane vrste. JSON sintaktično pravilna morda še vedno ne ustreza shemi aplikacije.

Ali validator hrani moj JSON?

Ne. Obdelava je sinhrona na strani strežnika, brez vztrajanja. Za zelo občutljive podatke, še vedno raje lokalno preverjanje prek jq ali skripta PHP.

Primer zahteve

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

Vhodna shema

Polje Tip Obvezno Privzeto
input text

Končne točke

  • GET https://cdrn.fr/api/v1/tools - izpiše vsa razpoložljiva orodja
  • GET https://cdrn.fr/api/v1/tools/json-validator - pridobi shemo tega orodja
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - izvede to orodje s JSON payloadom