Správa „unexpected token“ zriedka vysvetlí celý problém. Klient očakával JSON, no mohol dostať HTML prihlasovaciu stránku, textový stack trace, prázdnu odpoveď alebo iba polovicu dokumentu. Inokedy je syntax správna, ale aplikácia ju dekóduje dvakrát alebo pracuje s nesprávnym charsetom. Efektívna diagnostika preto nezačína ručným dopĺňaním úvodzoviek. Najprv treba zachytiť presné bajty, status, hlavičky a vrstvu, ktorá odpoveď vytvorila.

Skontrolujte status a Content-Type pred parserom

Reverse proxy môže vrátiť 502 HTML stránku, autentizačný middleware redirect a rate limiter plain text. Ak klient bez kontroly zavolá JSON parser, chyba ukáže prvý znak cudzieho formátu a zakryje pôvodnú príčinu.

Log má obsahovať status, bezpečne redigované hlavičky, dĺžku a krátku limitovanú vzorku. Celé citlivé body alebo tokeny do logu nepatria.

Prvý neplatný znak býva iba následok

Parser môže označiť čiarku, zatváraciu zátvorku alebo koniec vstupu. Skutočná chyba môže byť o niekoľko polí skôr: chýbajúca úvodzovka, neescapovaný newline alebo trailing comma. Formátovanie dokumentu a zobrazenie okolia offsetu pomôže viac než pohľad na jeden token.

Pri veľmi veľkom payloade treba uložiť bezpečný reprodukovateľný sample, nie kopírovať produkčné osobné dáta do ticketu.

JSON má prísnejšie pravidlá než JavaScript objekt

Kľúče a stringy vyžadujú dvojité úvodzovky. Komentáre, trailing commas, undefined, NaN a Infinity nie sú štandardný JSON. Konfiguračný súbor tolerovaný jedným parserom môže zlyhať v browseri alebo inom jazyku.

Producent má používať serializer, nie ručne skladať string. Serializer správne escapuje úvodzovky, backslash a control characters.

Dvojitá serializácia vytvára JSON vo vnútri stringu

Ak už serializovaný dokument prejde serializerom druhýkrát, klient dostane string plný backslashov namiesto objektu. Jedno parse vráti text, až druhé objekt. Pridať druhé parse na klientovi zakryje chybu zmluvy a zlyhá pri korektnej odpovedi.

Každá hranica má vedieť, či prijíma objektový model alebo hotové JSON bytes. Serializácia patrí na jedno miesto.

Skrátený prenos vyzerá ako syntaktická chyba

Timeout, pád procesu alebo nesprávny Content-Length môže ukončiť odpoveď uprostred poľa. Parser hlási neočakávaný koniec, hoci server pôvodne generoval správnu štruktúru. Treba porovnať deklarovanú a prijatú veľkosť, proxy logy a čas requestu.

Retry môže pomôcť pri idempotentnom čítaní, ale nesmie nahradiť opravu nestabilného streamu. Pri zápisovej operácii potrebuje idempotency key.

Charset môže poškodiť text ešte pred parsovaním

JSON sa na webe štandardne prenáša ako UTF-8. Zlé dekódovanie bajtov môže vytvoriť náhradné znaky alebo neplatnú sekvenciu. BOM a historické encodings spôsobujú rozdiely medzi parsermi.

Server má emitovať konzistentné UTF-8 a správny Content-Type. Diagnostika porovná raw bytes, nie iba string po automatickom decode frameworku.

Control characters musia byť escapované

Nový riadok, tab či iný control znak nemôže byť vo vnútri stringu vložený ľubovoľne. Ručné skladanie logu alebo CSV obsahu do JSON často zlyhá práve tu. Knižničný serializer vytvorí správne escape sekvencie.

Sanitizovať vstup odstránením znakov nie je všeobecné riešenie; môže zmeniť význam dát. Správna reprezentácia ich zachová bezpečne.

Duplicitné kľúče sú nebezpečne nejednoznačné

Dokument môže obsahovať rovnaký názov property viackrát. Niektorý parser ponechá prvú hodnotu, iný poslednú a ďalší vstup odmietne. Bezpečnostná vrstva a business logika potom môžu vyhodnotiť iné dáta.

Na nedôveryhodnej hranici je vhodné duplicity odmietnuť a nevytvárať ich serializerom. Canonical pravidlá musia byť spoločné pre podpis aj spracovanie.

Validný JSON ešte nemusí mať správnu schému

Parser úspešne načíta objekt, no pole môže mať zlý typ, chýbať alebo obsahovať hodnotu mimo rozsahu. Syntax a schema validation sú dve oddelené fázy. Chybová odpoveď má uviesť cestu, očakávaný typ a bezpečný popis problému.

Business validácia nasleduje až potom: syntakticky správny dátum môže byť v minulosti a existujúce ID môže patriť inému používateľovi.

Reprodukcia musí prejsť rovnakou cestou

String vložený do online validatora môže byť platný, zatiaľ čo chyba vzniká pri kompresii, proxy transformácii alebo klientskom decode. Integračný test má používať rovnaké HTTP vrstvy, charset a serializer ako produkcia.

Streaming parser mení miesto chyby

Pri veľkom dokumente nemusí aplikácia vytvárať celý strom v pamäti. Streaming parser spracúva tokeny alebo jednotlivé položky postupne. To znižuje peak memory, no chyba uprostred streamu môže prísť až po čiastočnom vykonaní práce. Import preto potrebuje transakciu, staging tabuľku alebo explicitný checkpoint model.

Consumer nesmie potvrdiť message broker správu skôr, než je jasné, že celý JSON prešiel syntaktickou a schémovou validáciou. Inak zostane polovica dát bez možnosti bezpečného retry.

Logovanie chybného vstupu musí mať limity

Najjednoduchšia diagnostika je zapísať celé body, no môže obsahovať tokeny, heslá, osobné údaje alebo megabajty obsahu. Bezpečnejší log uloží request ID, endpoint, dĺžku, parser offset, typ chyby a krátky redigovaný úsek okolo problému. Prístup k detailnej vzorke môže smerovať do chráneného úložiska s krátkou retenciou.

Redakcia musí fungovať aj pri malformed JSON, ktoré sa nedá najprv parsovať. Limity a byte-level masking preto patria pred bežný structured logger.

Generovanie odpovede môže zlyhať po odoslaní hlavičiek

Server niekedy začne streamovať úspešnú odpoveď a až potom narazí na nevalidný UTF-8 string alebo hodnotu, ktorú serializer nepodporuje. Status 200 už nemožno zmeniť a klient dostane skrátený JSON. Kritické odpovede je vhodné serializovať alebo validovať pred commitom hlavičiek, prípadne použiť protokol s jasným framingom.

Metrika serialization failures má odlišovať chybu dát od sieťového odpojenia. Bez nej sa incident javí iba ako náhodný parse error na klientovi.

Dobrá diagnostika postupuje od transportu k syntaxi, schéme a doméne. Zachytí presný vstup, určí prvú vrstvu s odlišným očakávaním a opraví vlastníctvo transformácie. Tak sa z neurčitého parse error stane konkrétna porušená zmluva.