Valideeri JSON-süntaks

kontrollib JSON-stringi süntaksit ja näitab esimese vea rida ja veergu

Milleks JSON-validaatorit kasutatakse?

JSON-validaatoril on tagasihoidlikum, kuid täpsem roll kui vormindajal: see ei kirjuta ümber mitte midagi. See võtab stringi ja vastab binaarsele küsimusele: kas see tekst vastab JSON-ile? RFC 8259? Kui jah, tagastab tööriist juhtimise. Kui ei, siis näitab see täpselt JSON-i rida, veergu ja väljavõtet probleemi lahendamiseks, et aidata arendajal see kohe parandada.

Praktikas on see tööriist, mida me kasutame kohe, kui parser kuskil veateate tagastab krüptiline nagu SyntaxError: Ootamatu luba } JSON-is positsioonis 217. Pigem kui lugege redaktoris tähemärgid käsitsi kokku, kleepige terve string, lugege asukohta ja vaadake solvav väljavõte.

Valideerimine, vormindamine: kaks erinevat toimingut

Me ajame need kaks sageli segamini. Meie JSON-vormindaja kasutab kehtivat JSON-i ja kirjutab selle ümber loetava taandega. Valideerija on süntaktilise otsusega rahul. Ta ei teosta semantilist valideerimist: ta ei tea, kas välja e-post väärtus näeb välja nagu meil, ega ka siis, kui struktuur ühtib JSON-skeemiga. Selleks kasutame spetsiaalsed tööriistad (ajv sõlmes, justinrainbow/json-schema PHP-s).

Klassikaline silumise jada on järgmine: valideeri kõigepealt (tööriist näitab süntaksiviga), vormindage (praegu kehtiv kasulik koormus muutub loetavaks), võrdle lõpuks veel üks viitekoormus meie JSON-i võrdlusprogrammi kaudu.

Kõige levinumad JSON-i vead

  • Koma lõpus: {"a": 1, "b": 2,}. Sallitav poolt JavaScript, ECMAScript ja JSON5; puhas JSON eitas. See on viga nr 1 kopeerimisel ja kleepimisel koodiredaktor.
  • Jutumärkide asemel apostroofid: {'a': 1} on kehtetu. JSON aktsepteerib ainult topeltjutumärke klahvide ja stringiväärtuste ümber.
  • Jutumärgita võtmed: {a: 1}, kehtiv JavaScripti süntaks, kuid vale JSON.
  • Kohepaosita juhtmärgid stringis: töötlemata reavahetus, a tabelid. JSON nõuab , , .
  • Kommentaarid: // kommentaar või /* */. Aktsepteeritud JSONC-is (config VS Code) või JSON5, keelduti puhtas JSON-is.
  • Vale kodeering: UTF-8 BOM faili alguses, vale Latin-1 sisu konverteeritud. Validaator tagastab nendel juhtudel sageli üldise sõnumi.
  • Lõpetamata struktuur: { või [ ilma sulgemiseta, tavaline kui kärpida kopeerimisel ja kleepimisel kasulikku koormust.

Kuidas validaator vea tuvastab

Tööriist kasutab PHP koodi json_decode() koos lipuga JSON_THROW_ON_ERROR. PHP tagastab sõnumi, mis sisaldab positsiooni baitides (positsioon 217), mille teisendame rea/veeru paar, lugedes reavahed enne nihet. Umbes 80 tähemärgi pikkune väljavõte on seejärel lõigake konteksti andmiseks positsiooni ümber. Tavaliselt on see tuvastamiseks piisav viga: valesti paigutatud tsitaat, lisakoma, puuduv sulg.

Hoiatus: PHP teatatud positsioon ei ole alati täpselt rikkuv tegelane. Ta on sageli pärast viga, kui parser on loobunud. Kui koodilõik näitab "nimi": "Alice", }, tegelik viga on koma, mitte sulg.

Tüüpilised kasutusjuhud

  • Vigane konfiguratsioon: composer.json, package.json, tsconfig.json, mis takistavad järgu käivitamist. Kleepime, näeme joont, parandame.
  • Läbistatud API vastus: puhverserver lõikas kasuliku koormuse. Struktuur pole valmis, valideerija teatab sellest.
  • Veebihaagi kasulik koormus: kolmanda osapoole teenus saadab valesti vormindatud JSON-i. Validaator võimaldab märkama probleemi saatja poolel ilma rakenduse koodi sukeldumata.
  • JSON on loodud konkatenatsiooni teel: tava, mida tuleb vältida, kuid tavaline, eriti bashis või SQL-is. Valideerija näitab paopaguniteta topeltjutumärke.

Tööriistade piirangud

Validaator ei valideeri skeemi alusel. Ta ei ütle, et tal on väljast puudu e-post, et väärtus ei ole täisarv või et eeldatav massiiv ei ole õige pikkusega. Nende struktuurikontrollide jaoks kasutame JSON-skeemi. Validaator ei paranda ka JSON: see ei ürita lisada puuduvat sulgu ega eemaldada täiendavat koma. See on valik : automaatne parandus peidab liiga sageli tõelisi vigu.

Korduma kippuvad küsimused

Mis vahe on linteril?

Linter läheb kaugemale: see kontrollib ka stiilireegleid (tähestikuline järjestus, nimetamistavad), tuvastab dubleerivad väärtused, soovitab parandusi. Valideerija jätkab vastavust süntaktiline.

Minu JSON on kehtiv, kuid minu rakendus lükkab selle tagasi?

Kontrollige kodeeringut (UTF-8 ilma BOM-ita), serveripoolset suurusepiirangut, eeldatavaid tüüpe. JSON süntaktiliselt õige ei pruugi siiski vastata rakenduse skeemile.

Kas validaator säilitab mu JSON-i?

Ei. Töötlemine toimub serveri poolel sünkroonselt, ilma püsivuseta. Väga tundlike andmete puhul eelistavad siiski kohalikku valideerimist jq või PHP-skripti kaudu.

Päringunäide

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

Sisendskeem

Väli Tüüp Kohustuslik Vaikimisi
input text

Lõpp-punktid

  • GET https://cdrn.fr/api/v1/tools - loetleb kõik saadaolevad tööriistad
  • GET https://cdrn.fr/api/v1/tools/json-validator - toob selle tööriista skeemi
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - täidab selle tööriista JSON-payloadiga