Hláška „unexpected token“ vypadá jako obyčejná syntaktická chyba. V produkci však často vzniká dříve: gateway vrátí HTML stránku, spojení uřízne body, logger přidá prefix nebo se bajty přečtou ve špatném charsetu. Úspěšné ladění proto nezačíná náhodným doplňováním čárek, ale přesným zjištěním, co skutečně dorazilo do parseru.

Nejprve je potřeba zachovat přijaté bajty

Konzole může interpretovat escape, zkrátit dlouhý string a skrýt řídicí znaky. Pro reprodukci je důležitá délka body, status, Content-Type a bezpečná kopie raw bytes. Citlivé hodnoty se redigují a krátce uchovávají.

Hexdump kolem chybové pozice ukáže BOM, null bytes, neplatné UTF-8 a neočekávané konce řádků. Teprve potom víme, zda parser dostal JSON.

HTML místo JSON je běžný produkční případ

Load balancer, login gateway nebo webserver může vrátit vlastní error page. Klient očekává JSON a selže na prvním <. Skutečnou příčinou je 502, redirect nebo limit velikosti.

Klient má před parsováním zkontrolovat status a media type. Při nesouladu je bezpečný krátký náhled užitečnější než zavádějící obecná chyba JSON.

Uříznutý dokument selhává typicky na konci

Chybějící závorka nemusí být chyba producenta. Timeout, přerušené spojení, chybný Content-Length nebo plný buffer zkrátí původně validní body. Pomůže porovnání délek a logů infrastruktury.

Retry zápisové operace vyžaduje idempotency. Server mohl akci provést, přestože klient obdržel jen část odpovědi.

Trailing comma a komentáře nejsou JSON

JavaScript literal nebo JSON5 může povolit komentáře, jednoduché uvozovky či čárku za posledním prvkem. Standardní JSON nikoli. Dokument vypadající v editoru rozumně může být správně odmítnut.

Pokud API slibuje JSON, opravuje se producent. Pro ručně editovanou konfiguraci lze vědomě zvolit jiný formát.

Stringy selhávají na escape pravidlech

Surový newline uvnitř stringu není povolen a uvozovka či backslash se musí escapovat. Ruční skládání funguje jen do chvíle, kdy uživatel zadá quote nebo cestu Windows.

Serializační knihovna má dostat datovou strukturu a vytvořit JSON sama. Template a replace nepokrývají všechny řídicí znaky a Unicode.

Neplatné UTF-8 je samostatný problém

Webový JSON se běžně přenáší jako UTF-8. Legacy databáze nebo soubor může obsahovat jiné kódování. Parser vstup odmítne nebo dřívější vrstva nahradí znaky.

Oprava patří ke zdroji nebo jasné importní hranici. Opakované zkoušení různých decodingů může data nevratně změnit.

Dvojitá serializace vytváří validní, ale chybný typ

Parser někdy uspěje a vrátí string, který sám obsahuje JSON. Jedna vrstva již serializovala objekt a další serializovala hotový text. Typickým signálem jsou backslashe před každou uvozovkou.

Řešením není automaticky parsovat dvakrát. Smlouva musí říci, zda funkce přijímá objekt nebo JSON text.

Duplicitní klíče jsou bezpečnostně nejednoznačné

Knihovny mohou zachovat první hodnotu, poslední nebo dokument odmítnout. Gateway a business logic tak mohou pracovat s jiným polem. Útočník využije rozdíl parserů.

Na hranici důvěry je nejjasnější duplicity odmítnout. Producent má serializovat mapu, nikoli slepovat fragmenty.

Velká čísla se mohou poškodit až po parsování

JavaScript zaokrouhlí některá 64bitová ID. JSON je validní, ale cache nebo další request použije jinou hodnotu. Diagnostika má porovnat číslo před a po konverzi.

Velké identifikátory se posílají jako string a decimal hodnoty mají definovanou přesnost. Testy musí zahrnout hranice.

Chybovou pozici je nutné vztáhnout k originálu

Pretty-print před analýzou posune offsety a může sám selhat. Malé okno před a za pozicí často ukáže nedokončený string nebo chybějící oddělovač.

U UTF-8 se může lišit byte offset a počet viditelných znaků. Nástroj má uvést, kterou jednotku hlásí.

Více dokumentů potřebuje framing

Několik JSON objektů za sebou netvoří jeden dokument. NDJSON definuje jednu hodnotu na řádek, jiné protokoly používají délkový prefix. Obyčejný parser očekává jediný top-level value.

Log text přidaný před payload také formát zničí. Metadata patří do wrapper objektu nebo jiného kanálu.

Produkční případ zahrnuje hlavičky a infrastrukturu

Body může lokálně parsovat, zatímco problém závisí na gzip, redirectu, charsetu nebo middleware. Reprodukce má zachovat metodu, status, relevantní hlavičky a pořadí proxy.

Secrets lze nahradit hodnotami stejného typu a délky. Struktura zůstane reprodukovatelná bez kopírování zákaznických dat.

Diagnostický vzorek potřebuje bezpečný životní cyklus

Raw payload může obsahovat credentials, zdravotní údaje nebo osobní text. Jeho uložení má mít omezený přístup, krátkou retention a audit. Běžný aplikační log není vhodné úložiště pro celé chybné requesty.

Redakce musí zachovat syntaktický problém. Nahrazení každé citlivé hodnoty jednoduchým slovem může změnit délku, escape nebo Unicode a odstranit příčinu chyby.

Rozdílné parsery je nutné porovnat na stejných fixtures

Gateway může validovat JSON jinou knihovnou než backend. Duplicitní klíče, extrémní čísla a invalid Unicode pak projdou jen některou vrstvou. Sdílené negativní testy ukazují rozdíly před produkcí.

Nejbezpečnější politika je zvolit společný přijatelný profil a nejednoznačné konstrukce odmítnout co nejdříve.

Minimalizovaný vstup patří do regresního testu

Po bezpečném uložení originálu lze odstraňovat nesouvisející části, dokud nezůstane nejmenší selhávající příklad. Ukáže, zda rozhoduje znak, velikost, nesting nebo verze parseru.

Fixture se uloží s nastavením knihovny. Další refactor pak nemůže stejnou chybu tiše vrátit.

Schema validace následuje až po parse

Validní JSON může postrádat povinné pole nebo mít nesprávný typ. To je chyba smlouvy, ne syntaxe. Odpověď má tyto fáze rozlišit.

Robustní pipeline zkontroluje transport a bytes, potvrdí UTF-8, striktně parsuje, validuje schema a teprve poté spustí business logic.