Valideeri JSON-süntaks
- Töölaud
- Dokumentatsioon
- API
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:
// kommentaarvõ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ööriistadGET https://cdrn.fr/api/v1/tools/json-validator- toob selle tööriista skeemiPOST https://cdrn.fr/api/v1/tools/json-validator/execute- täidab selle tööriista JSON-payloadiga