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ží.

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.