JSON Toolkit

Proč koncová čárka rozbíjí JSON

Shrnutí: Koncové čárky jsou legální v objektových literálech JavaScriptu a fatální v JSON. Zde je přesná chyba, gramatika RFC 8259, která ji způsobuje, a tři opravy, které skutečně drží.

Začátečník~3 min čteníPublikováno 2026-10-30Aktualizováno 2026-10-30
Proč koncové čárky v JSON selhávají a jak je opravit

Stručně: JSON zakazuje koncové čárky všude – když parser selže, smažte poslední čárku formátovačem; JSON5 nebo JSONC používejte jen pro lokální benevolentní parsování a do jiných systémů vždy vypisujte standardní JSON.

Protože to gramatika říká.

{
  "name": "demo",
  "size": 12,
}

JSON.parse vyhodí Unexpected token } in JSON at position 34. Node to formuluje jinak, ale každý engine ukazuje na stejné místo: čárku před }.

Na co si parser vlastně stěžuje

Produkce objektu v RFC 8259 je:

object = begin-object [ member *( value-separator member ) ] end-object

Hranaté závorky znamenají nepovinné, hvězdička znamená nula nebo více. Jinými slovy: čárky oddělují členy a za posledním členem následuje přímo }.

Takže po čárce je parser připraven na další název člena. Přečte } a selže. Pole se chovají stejně – [1, 2, 3,] selže u ].

Odkud ten zvyk pochází

Objektové literály JavaScriptu povolují koncové čárky od ES5, stejně jako seznamy v Pythonu a složené literály v Go. Editory je přidávají automaticky. Poté někdo zkopíruje objektový literál ze souboru .js do souboru .json a soubor přestane parsovat.

Dalším častým zdrojem je ručně sestavený JSON: smyčka, která běží i <= length, nechá čárku za posledním prvkem.

Tři opravy

Odstraňte čárku. Vhodné pro ruční úpravy. Vložte do formátovače JSON a chyba se hlásí s řádkem a sloupcem, takže vidíte přesně, kterou smazat.

Parsujte jako JSON5. Nadmnožiny koncové čárky přijímají, což je pro lokální konfiguraci v pořádku. Není to v pořádku pro cokoli, co posíláte jinému systému – příjemce to stále odmítne.

Přestaňte skládat řetězce. Použijte JSON.stringify, json.dumps, Jackson. Serializátor oddělovače ošetřuje správně a zároveň řeší escapování.

Rychlý seznam pro audit

Kde Typická příčina
Skládání ve smyčce i <= length nechá jednu čárku navíc
Kopírování a vkládání Objektový literál vytažený ze souboru JS
Šablony Pevně daná čárka plus smyčka, která přidá další
Ruční úpravy Poslední pole smazáno, jeho čárka zůstala

Časté dotazy

Proč jsou koncové čárky legální v JavaScriptu, ale ne v JSON?

Objektové literály JavaScriptu je povolují od ES5, stejně jako seznamy v Pythonu a složené literály v Go, a proto zvyk následuje lidi i do JSON. RFC 8259 povoluje čárky jen mezi členy: za posledním členem následuje přímo } nebo ]. Kopírování objektového literálu ze souboru .js do souboru .json je obvyklý zdroj.

Mám parsovat jako JSON5, abych přijal koncové čárky?

Jen pro lokální konfiguraci. Nadmnožiny koncové čárky přijímají, ale cokoli posíláte jinému systému, se parsuje jako striktní JSON a stále selže. Na výstupní hranici generujte standardní JSON, místo abyste spoléhali na benevolentnost příjemce.

Kde mám po chybě koncové čárky hledat nejprve?

Začněte pozicí v chybové zprávě: obvykle ukazuje na čárku před } nebo ]. Poté zkontrolujte tři obvyklé zdroje: smyčku napsanou s i <= length, objektový literál vložený ze souboru JS a šablonu, která má pevně danou čárku vedle smyčky. Vložení do formátovače hlásí přesný řádek a sloupec.

Další čtení