Tech Help
Běžné chyby JSON: koncová čárka, uvozovky a Unexpected token
Opravte neplatný JSON: koncová čárka, jednoduché uvozovky, klíče bez uvozovek a Unexpected token. Proč JSON.parse selhává a jak JSON ověřit.
Většina chyb JSON pochází z přísných syntaktických pravidel: koncová čárka, jednoduché uvozovky, názvy vlastností bez uvozovek, chybějící čárka, neshodné závorky, neplatný escape nebo komentáře.
JSON vypadá jako objekt JavaScript, ale je přísnější. Názvy vlastností a řetězce potřebují dvojité uvozovky.
Když vidíte Unexpected token, nahlášený znak může být místo, kde se parsování zastavilo—ne nutně začátek původní chyby.
Váš JSON je označen jako neplatný. Obvykle jde o drobný syntaktický problém, ne o rozbitý formát souboru. Sedm chyb níže způsobuje většinu Unexpected token.
Proč se JSON tak snadno rozbije?
JSON je datový formát s přísnou syntaxí. Literál objektu JavaScript může vypadat podobně a přesto být neplatný JSON. Ve standardním JSON potřebují názvy vlastností a řetězce dvojité uvozovky, koncová čárka není povolena a komentáře nejsou součástí formátu.
1. Koncové čárky
Přebytečná čárka za poslední vlastností je problém. Standardní JSON ji nepovoluje.
Neplatný
{
"name": "Alex",
"age": 30,
}
Platný
{
"name": "Alex",
"age": 30
}
Stejné pravidlo platí pro pole. Odstraňte čárku za poslední položkou.
Neplatný
[
"red",
"green",
]
Platný
[
"red",
"green"
]
2. Jednoduché uvozovky místo dvojitých
JavaScript často přijímá jednoduché uvozovky. JSON ne. Názvy vlastností i řetězcové hodnoty musí používat dvojité uvozovky.
Neplatný
{
'name': 'Alex'
}
Platný
{
"name": "Alex"
}
3. Názvy vlastností bez uvozovek
V JavaScriptu někdy můžete napsat name bez uvozovek. V JSON musí být každý název vlastnosti řetězec v dvojitých uvozovkách.
Neplatný
{
name: "Alex",
age: 30
}
Platný
{
"name": "Alex",
"age": 30
}
4. Chybějící čárky mezi hodnotami
Mezi vlastnostmi a položkami pole je potřeba čárka. Parser může nahlásit Unexpected token u další uvozovky nebo závorky, ne u chybějící čárky.
Neplatný
{
"name": "Alex"
"age": 30
}
Platný
{
"name": "Alex",
"age": 30
}
5. Chybějící nebo přebytečné závorky
Objekty používají { }. Pole používají [ ]. Vnořený JSON často selže, když chybí ], přebývá } nebo se obojí vymění. Spočítejte otevírací a zavírací páry.
Neplatný
{
"items": [1, 2
}
Platný
{
"items": [1, 2]
}
6. Neplatné escape sekvence
Uvnitř řetězce JSON začíná zpětné lomítko escape. Sekvence jako ", \ a \n jsou platné. Cesta Windows zapsaná C:\Users není: \U není legální JSON escape. Zdvojte zpětná lomítka, jinak se parser zastaví na tom znaku.
Neplatný
{"file":"C:\Users\Alex"}
Platný
{"file":"C:\\Users\\Alex"}
7. Komentáře uvnitř JSON
Standardní JSON nemá komentáře. Některé konfigurační nástroje přijímají // nebo /* */ (JSONC, JSON5 a podobné). To není standardní JSON a JSON.parse to odmítne.
Neplatný
{
// user name
"name": "Alex"
}
Co znamená Unexpected token?
Parser narazil na znak, který na té pozici nebyl povolen. Nahlášené místo je tam, kde se čtení zastavilo. Pokud jste dříve vynechali čárku, chyba může ukazovat na uvozovku další vlastnosti. Znění se liší podle běhového prostředí; neočekávejte, že každý prohlížeč vytiskne stejnou větu.
Co znamená Unexpected end of JSON input?
Text skončil dřív, než byla hodnota dokončena. Typické příčiny: chybějící } nebo ], oříznutý vstup, prázdné tělo nebo přerušená odpověď API. Není to jedna jediná chyba.
Proč JSON.parse() selhává?
JSON.parse() přijímá pouze platný JSON text. Toto uspěje:
const text = '{"name":"Alex"}';
const data = JSON.parse(text);
Toto selže, protože jednoduché uvozovky nejsou JSON:
const text = "{'name':'Alex'}";
JSON.parse(text);
Přesná chybová zpráva závisí na běhovém prostředí JavaScript. Berte zprávu jako nápovědu a zkontrolujte čárky, uvozovky a závorky poblíž té pozice.
Literál objektu JavaScript může vypadat jako { name: 'Alex' }. Platný JSON musí vypadat jako { "name": "Alex" }: názvy a řetězce v dvojitých uvozovkách, bez koncové čárky, bez komentářů.
- Text JSON
- Parser čte tokeny
- Platná data nebo Unexpected token
Jak rychle najít chybu JSON
Postupujte v tomto pořadí. Nezačínejte přepisem celého souboru.
- Prožeňte JSON validátorem.
- Přečtěte první nahlášenou chybu.
- Podívejte se kousek před nahlášenou pozici.
- Zkontrolujte čárky, zejména koncové a chybějící.
- Zkontrolujte uvozovky: jen dvojité.
- Sladěte { } a [ ].
- Zkontrolujte escape zpětným lomítkem v řetězcích.
- Odstraňte komentáře, pokud potřebujete přísný JSON.
Rychlá mapa obvyklých oprav:
| Problém | Oprava |
|---|---|
| Koncová čárka | Smažte čárku za poslední položkou. |
| Jednoduché uvozovky | Použijte dvojité uvozovky pro názvy a řetězce. |
| Klíč bez uvozovek | Obalte název vlastnosti dvojitými uvozovkami. |
| Chybějící čárka | Vložte čárku mezi vlastnosti nebo položky pole. |
| Chybějící závorka | Uzavřete každý pár { } a [ ]. |
| Neplatný escape | Použijte legální escape, nebo zdvojte zpětná lomítka v cestách. |
| Komentář | Odstraňte // a /* */ pro standardní JSON. |
Ověřte a formátujte JSON v prohlížeči
NEXNARA Formátování a porovnání JSON může zkontrolovat JSON na tomto zařízení.
Můžete ověřovat, hezky formátovat 2 mezerami, 4 mezerami nebo tabulátorem, minify, porovnat dva dokumenty (JSON Diff) a otevřít soubor .json. Parsování používá JSON.parse v prohlížeči, ne eval.
Dokumenty větší než 5 MB mohou působit pomalu. Text větší než 15 MB se v prohlížeči nezpracovává, aby stránka zůstala svižná.
Samotné zpracování JSON probíhá ve vašem prohlížeči. Text se pro tento nástroj neodesílá na server NEXNARA. Reklamy a další funkce webu stále používají síť; to je oddělené od zpracování.
Potřebujete zkontrolovat neplatný JSON? Otevřete Formátování a porovnání JSON a vložte text.
FAQ
Proč můj JSON říká Unexpected token?
Parser narazil na znak, který tam nebyl povolen. Skutečná chyba—často chybějící čárka nebo jednoduchá uvozovka—může sedět těsně před tou pozicí.
Jsou koncové čárky v JSON povoleny?
Ne. Standardní JSON nepovoluje čárku za poslední vlastností nebo položkou pole. Literály objektů JavaScript to často povolují.
Může JSON používat jednoduché uvozovky?
Ne. Názvy vlastností a řetězce musí používat dvojité uvozovky.
Může JSON obsahovat komentáře?
Ne ve standardním JSON. Některé nástroje přijímají JSONC nebo JSON5 s komentáři; JSON.parse je stejně odmítne.
Proč JSON.parse() selhává?
Řetězec není platný JSON. Typické příčiny jsou koncová čárka, jednoduché uvozovky, klíče bez uvozovek, komentáře nebo oříznutá hodnota. Přesná zpráva závisí na běhovém prostředí.
Jak ověřím, zda je JSON platný?
Vložte ho do validátoru jako Formátování a porovnání JSON, nebo zavolejte JSON.parse v konzoli. Pokud parsování vyhodí výjimku, text není platný JSON.