Validoi JSON-syntaksi

varmentaa JSON-merkkijonon syntaksin ja ilmoittaa ensimmäisen virheen rivin ja sarakkeen

Mihin JSON-validaattoria käytetään?

JSON-validaattorilla on vaatimattomampi, mutta tarkempi rooli kuin muotoilijalla: se ei kirjoita uudelleen ei mitään. Se vaatii merkkijonon ja vastaa binäärikysymykseen: onko tämä teksti JSON-standardin mukainen? RFC 8259? Jos kyllä, työkalu palauttaa ohjauksen. Jos ei, se osoittaa täsmälleen JSON-rivin, sarakkeen ja otteen ongelman ympärille, jotta kehittäjä voi korjata sen välittömästi.

Käytännössä se on työkalu, jota käytämme heti, kun jäsentäjä jossain palauttaa virheilmoituksen salaperäinen, kuten SyntaxError: Unexpected token } JSON:ssa paikassa 217. Sen sijaan laske merkit käsin editorissa, liitä koko merkkijono, lue sijainti ja katso loukkaava ote.

Validointi, muotoilu: kaksi erillistä toimintoa

Sekoitamme usein nämä kaksi. JSON-muotoilijamme käyttää kelvollista JSON- ja kirjoittaa sen uudelleen luettavalla sisennyksellä. Validaattori on tyytyväinen syntaktiseen tuomioon. Hän ei suorita semanttista vahvistusta: se ei tiedä, onko email-kentän arvo näyttää sähköpostilta, eikä rakenne vastaa JSON-skeemaa. Tätä varten käytämme omistetut työkalut (ajv Nodessa, justinrainbow/json-schema PHP:ssä).

Klassinen virheenkorjauksen järjestys on: tarkista ensin (työkalu ilmaisee syntaksivirheen), muotoile sitten (nyt voimassa oleva hyötykuorma tulee luettavaksi), vertaa lopuksi toinen viitehyötykuorma JSON-vertailijamme kautta.

Yleisimmät JSON-virheet

  • Lopussa oleva pilkku: {"a": 1, "b": 2,}. Suvaitseva JavaScript, ECMAScript ja JSON5; puhdas JSON kieltää. Tämä on #1 virhe kopioitaessa ja liitettäessä koodieditori.
  • Lausausmerkkien sijaan heittomerkit: {'a': 1} on virheellinen. JSON hyväksyy vain lainausmerkit avainten ja merkkijonoarvojen ympärillä.
  • Lainaamattomat avaimet: {a: 1}, kelvollinen JavaScript-syntaksi, mutta virheellinen JSON.
  • Vaihtomerkkimerkit merkkijonossa: raaka rivinvaihto, a taulukointi. JSON vaatii , , .
  • Kommentit: // kommentti tai /* */. Hyväksytty JSONC:ssa (config VS Code) tai JSON5, hylätty puhtaassa JSONissa.
  • Väärä koodaus: UTF-8 BOM tiedoston alussa, virheellinen Latin-1-sisältö muunnettu. Validaattori palauttaa usein yleisen viestin näissä tapauksissa.
  • Käyttämätön rakenne: { tai [ ilman sulkemista, yleinen kun katkaiset hyötykuorman, kun kopioit ja liität.

Kuinka validaattori paikantaa virheen

Työkalu käyttää PHP:n json_decode()-komentoa JSON_THROW_ON_ERROR-lipulla. PHP palauttaa viestin, joka sisältää sijainnin tavuina (sijainti 217), jonka muunnamme rivi/sarake-pari laskemalla rivinvaihdot ennen siirtymää. Noin 80 merkin ote on leikkaa sitten asema ympärille antaaksesi kontekstin. Tämä riittää yleensä tunnistamiseen virhe: väärä lainaus, ylimääräinen pilkku, puuttuva hakasulku.

Varoitus: PHP:n ilmoittama sijainti ei aina ole täsmälleen loukkaava merkki. Hän on usein virheen jälkeen, kun jäsentäjä on luovuttanut. Jos katkelmassa näkyy "nimi": "Alice", }, todellinen virhe on pilkku, ei aaltosulu.

Tyypillisiä käyttötapauksia

  • Vioittuneet määritykset: composer.json, package.json, tsconfig.json, jotka estävät koontiversion käynnistymisen. Liitämme, näemme viivan, korjaamme.
  • Katkaistu API-vastaus: Välityspalvelin katkaisi hyötykuorman. Rakenne ei ole valmis, validaattori ilmoittaa tästä.
  • Webhookin hyötykuorma: Kolmannen osapuolen palvelu lähettää virheellisesti muotoiltuja JSON-tiedostoja. Validaattori sallii huomaamaan ongelman lähettäjän puolella sukeltamatta sovelluskoodiin.
  • JSON muodostettu ketjuttamalla: käytäntö välttää, mutta yleinen, erityisesti bashissa tai SQL:ssä. Validaattori näyttää lainausmerkit ilman koodinvaihtomerkkejä.

Työkalun rajoitukset

Validaattori ei tarkista skeemaa vastaan. Hän ei sano puuttuvansa kentälle email, että arvo ei ole kokonaisluku tai että odotetun taulukon pituus ei ole oikea. Näihin rakennetarkistuksiin käytämme JSON-skeemaa. Validaattori ei myöskään korjaa JSON: se ei yritä lisätä puuttuvaa aaltosuljetta tai poistaa ylimääräistä pilkkua. Se on valinta : automaattinen korjaus piilottaa liian usein todelliset virheet.

Usein kysytyt kysymykset

Mitä eroa linterillä on?

Linter menee pidemmälle: se tarkistaa myös tyylisäännöt (aakkosjärjestys, nimeämiskäytännöt), havaitsee päällekkäiset arvot, ehdottaa parannuksia. Validaattori jatkaa noudattamista syntaktinen.

JSON-ni on kelvollinen, mutta sovellukseni hylkää sen?

Tarkista koodaus (UTF-8 ilman tuoteluetteloa), palvelinpuolen kokorajoitus, odotetut tyypit. JSON syntaktisesti oikea ei välttämättä silti vastaa sovelluskaaviota.

Säilyttääkö validaattori JSON-ni?

Ei. Käsittely on synkronista palvelinpuolella ilman pysyvyyttä. Erittäin arkaluonteisille tiedoille silti suosivat paikallista vahvistusta jq- tai PHP-komentosarjan avulla.

Pyyntöesimerkki

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

Syöteskeema

Kenttä Tyyppi Pakollinen Oletus
input text

Päätepisteet

  • GET https://cdrn.fr/api/v1/tools - listaa kaikki saatavilla olevat työkalut
  • GET https://cdrn.fr/api/v1/tools/json-validator - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - suorittaa tämän työkalun JSON-payloadilla