Overiť syntax JSON
- Dashboard
- Dokumentácia
- API
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:
// komentaralebo/* */. 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ástrojeGET https://cdrn.fr/api/v1/tools/json-validator- získa schému tohto nástrojaPOST https://cdrn.fr/api/v1/tools/json-validator/execute- spustí tento nástroj s JSON payloadom