Overiť syntax JSON

kontroluje syntax JSON reťazca a uvádza riadok a stĺpec prvej chyby

Na čo slúži JSON validátor?

JSON validátor má skromnejšiu, ale presnejšiu úlohu než formátor: nič neprepisuje. Berie reťazec a odpovedá na binárnu otázku: je tento text JSON v súlade s RFC 8259? Ak áno, nástroj vráti kontrolu. Ak nie, indikuje presne riadok, stĺpec a výňatok JSON okolo problému, pre pomoc vývojárovi okamžite opraviť.

V praxi je to nástroj, ktorý používame, akonáhle parser niekde vracia kryptickú chybovú správu typu SyntaxError: Unexpected token } in JSON at position 217. Namiesto ručného počítania znakov v editore vložíme kompletný reťazec, prečítame pozíciu a vidíme chybný výňatok.

Validácia, formátovanie: dve odlišné operácie

Často sa zamieňajú. Náš JSON formátor berie validný JSON a prepisuje ho s čitateľným odsadením. Validátor naopak sa uspokojí so syntaktickým verdiktom. Nevykonáva sémantickú validáciu: nevie, či hodnota poľa email pripomína email, ani či štruktúra zodpovedá JSON Schema. Pre to používame dedikované nástroje (ajv v Node, justinrainbow/json-schema v PHP).

Klasická postupnosť v debugovaní je: validovať najprv (nástroj indikuje syntax chybu), formátovať potom (odteraz validný payload sa stáva čitateľným), porovnať nakoniec s iným referenčným payloadom cez náš JSON komparátor.

Najčastejšie JSON chyby

  • Trailing comma: {"a": 1, "b": 2,}. Tolerovaná JavaScriptom, ECMAScriptom a JSON5; odmietnutá čistým JSON. Je to chyba č. 1 pri kopírovaní z kódového editora.
  • Apostrofy namiesto dvojitých úvodzoviek: {'a': 1} je nevalidné. JSON akceptuje iba dvojité úvodzovky okolo kľúčov aj reťazcových hodnôt.
  • Neúvodzovkované kľúče: {a: 1}, validná JavaScript syntax, ale nevalidný JSON.
  • Neescapované kontrolné znaky v reťazci: surový zlom riadku, tabulátor. JSON vyžaduje \n, \t, \r.
  • Komentáre: // komentar alebo /* */. Akceptované v JSONC (VS Code config) alebo JSON5, odmietnuté v čistom JSON.
  • Nesprávne kódovanie: UTF-8 BOM na začiatku súboru, obsah v zle konvertovanom latin-1. Validátor často vracia generickú správu pre tieto prípady.
  • Neukončená štruktúra: { alebo [ bez zatvorenia, časté pri orezaní payloadu pri kopírovaní.

Ako validátor lokalizuje chybu

Nástroj používa json_decode() PHP s flagom JSON_THROW_ON_ERROR. PHP vracia správu obsahujúcu pozíciu v bajtoch (position 217), ktorú konvertujeme na pár riadok/stĺpec počítaním zlomov riadkov pred offsetom. Výňatok približne 80 znakov je potom vyrezaný okolo pozície pre poskytnutie kontextu. Zvyčajne je to postačujúce pre identifikáciu chyby: zle umiestnená úvodzovka, čiarka navyše, chýbajúca zátvorka.

Pozor: pozícia hlásená PHP nie je vždy presne chybný znak. Často je po chybe, v momente, keď parser rezignoval. Ak výňatok zobrazuje "name": "Alice", }, skutočná chyba je čiarka, nie zložená zátvorka.

Typické prípady použitia

  • Korumpovaná konfigurácia: composer.json, package.json, tsconfig.json, ktoré bránia spusteniu buildu. Vložíme, vidíme riadok, opravíme.
  • Orezaná API odpoveď: proxy odrezala payload. Štruktúra nie je ukončená, validátor to signalizuje.
  • Webhook payload: tretia služba odosiela zle formovaný JSON. Validátor umožňuje skonštatovať problém na strane odosielateľa bez ponárania sa do aplikačného kódu.
  • JSON konštruovaný konkatenáciou: praktika na vyhýbanie sa, ale bežná, najmä v bash alebo SQL. Validátor odhaľuje neescapované dvojité úvodzovky.

Limity nástroja

Validátor nevykonáva validáciu proti schéme. Nehovorí, že chýba pole email, že hodnota nie je celé číslo, ani že očakávané pole nemá správnu dĺžku. Pre tieto štrukturálne overenia používame JSON Schema. Validátor tiež neopraví JSON: nepokúša sa pridať chýbajúcu zátvorku, ani odstrániť čiarku navyše. Je to voľba: automatická oprava príliš často maskuje skutočné chyby.

Často kladené otázky

Aký je rozdiel od lintera?

Linter ide ďalej: overuje aj štýlové pravidlá (abecedné, naming konvencie), detekuje duplicitné hodnoty, navrhuje vylepšenia. Validátor zostáva pri syntaktickej zhode.

Môj JSON je validný, ale moja aplikácia ho odmieta?

Skontrolujte kódovanie (UTF-8 bez BOM), limit veľkosti na strane servera, očakávané typy. Validný JSON môže byť odmietnutý aplikáciou, ak nedodržiava očakávanú obchodnú schému, alebo presahuje POST limit.

Ukážka požiadavky

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

Vstupná schéma

Pole Typ Povinné Predvolené
input text

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všetky dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/json-validator - získa schému tohto nástroja
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - spustí tento nástroj s JSON payloadom