Ověřit syntaxi JSON

kontroluje syntaxi JSON řetězce a uvádí řádek a sloupec první chyby

K čemu slouží JSON validátor?

JSON validátor má skromnější, ale přesnější roli než formátor: nic nepřepisuje. Bere řetězec a odpovídá na binární otázku: je tento text JSON konformní RFC 8259? Pokud ano, nástroj vrátí ruku. Pokud ne, přesně indikuje řádek, sloupec a výňatek JSON kolem problému, aby developerovi pomohl okamžitě opravit.

V praxi je to nástroj, který se používá, jakmile parser někde vrátí kryptickou chybovou zprávu typu SyntaxError: Unexpected token } in JSON at position 217. Místo ručního počítání znaků v editoru vložíme kompletní řetězec, čteme pozici a vidíme chybný výňatek.

Validace, formátování: dvě odlišné operace

Často je zaměňujeme. Náš JSON formátor bere validní JSON a přepisuje ho s čitelnou indentací. Validátor se spokojuje se syntaktickým verdiktem. Neprovádí sémantickou validaci: neví, zda hodnota pole email připomíná email, ani zda struktura odpovídá JSON Schema. Pro to se používají dedikované nástroje (ajv v Node, justinrainbow/json-schema v PHP).

Klasický řetězec v debugu: validovat nejdřív (nástroj indikuje syntaktickou chybu), formátovat pak (nyní validní payload se stává čitelný), porovnat nakonec s jiným referenčním payloadem přes náš JSON comparator.

Nejčastější JSON chyby

  • Koncová čárka (trailing comma): {"a": 1, "b": 2,}. Tolerovaná JavaScriptem, ECMAScriptem a JSON5; odmítnutá čistým JSON. Je to chyba č. 1 při kopírování z editoru kódu.
  • Apostrofy místo dvojitých uvozovek: {'a': 1} je nevalidní. JSON přijímá pouze dvojité uvozovky, kolem klíčů jako řetězcových hodnot.
  • Nekvotované klíče: {a: 1}, validní JavaScript syntax ale nevalidní JSON.
  • Neescapované kontrolní znaky v řetězci: surové zalomení řádku, tabulátor. JSON vyžaduje \n, \t, \r.
  • Komentáře: // komentář nebo /* */. Přijímané v JSONC (VS Code config) nebo JSON5, odmítnuté čistým JSON.
  • Nesprávné kódování: UTF-8 BOM na začátku souboru, obsah v latin-1 špatně převedený. Validátor pro tyto případy často vrací obecnou zprávu.
  • Neukončená struktura: { nebo [ bez zavření, časté při oříznutí payloadu při kopírování.

Jak validátor lokalizuje chybu

Nástroj používá json_decode() z PHP s vlajkou JSON_THROW_ON_ERROR. PHP vrací zprávu obsahující pozici v bajtech (position 217), kterou převedeme na řádek/sloupec dvojici počítáním zalomení řádků před offsetem. Výňatek asi 80 znaků je pak vyříznut kolem pozice pro poskytnutí kontextu. To obvykle stačí pro identifikaci chyby: špatně umístěná uvozovka, čárka navíc, chybějící závorka.

Pozor: pozice hlášená PHP není vždy přesně chybný znak. Často je po chybě, v okamžiku, kdy parser vzdal. Pokud výňatek ukazuje "name": "Alice", }, skutečná chyba je čárka, ne složená závorka.

Typické případy použití

  • Poškozená konfigurace: composer.json, package.json, tsconfig.json, které brání startu buildu. Vložíme, vidíme řádek, opravíme.
  • Oříznutá API odpověď: proxy oříznul payload. Struktura není ukončena, validátor to signalizuje.
  • Webhook payload: třetí služba posílá špatně tvarovaný JSON. Validátor umožňuje konstatovat problém na straně odesílatele bez ponoření do aplikačního kódu.
  • JSON konstruovaný konkatenací: praxe k vyhnutí, ale běžná, zejména v bashi nebo SQL. Validátor odhaluje neescapované dvojité uvozovky.

Limity nástroje

Validátor neprovádí validaci proti schématu. Neříká, že chybí pole email, že hodnota není celé číslo nebo že očekávané pole nemá správnou délku. Pro tyto strukturální ověření se používá JSON Schema. Validátor také neopravuje JSON: nepokouší se přidat chybějící složenou závorku, ani odstranit čárku navíc. Je to volba : automatická oprava příliš často maskuje skutečné chyby.

Často kladené otázky

Jaký je rozdíl s linterem?

Linter jde dál: ověřuje také stylová pravidla (abecedně, konvence pojmenování), detekuje duplikované hodnoty, navrhuje vylepšení. Validátor zůstává u syntaktické konformity.

Můj JSON je validní, ale aplikace ho odmítá?

Ověřte kódování (UTF-8 bez BOM), limit velikosti na straně serveru, očekávané typy. Syntakticky správný JSON přesto nemusí odpovídat aplikačnímu schématu.

Uchovává validátor můj JSON?

Ne. Zpracování je synchronní na straně serveru, bez perzistence. Pro velmi citlivá data preferujte stejně lokální validaci přes jq nebo PHP skript.

Ukázka požadavku

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é Výchozí
input text

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všechny dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/json-validator - získá schéma tohoto nástroje
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - spustí tento nástroj s JSON payloadem