Tech Help
Често срещани JSON грешки: крайна запетая, кавички и Unexpected token
Поправете невалиден JSON: крайна запетая, единични кавички, ключове без кавички и Unexpected token. Защо JSON.parse се проваля и как да проверите JSON.
Повечето JSON грешки идват от строг синтаксис: крайна запетая, единични кавички, имена на свойства без кавички, липсваща запетая, несъвпадащи скоби, невалидно екраниране или коментари.
JSON прилича на обект JavaScript, но е по-строг. Имената на свойства и низовете се нуждаят от двойни кавички.
Ако видите Unexpected token, съобщеният знак може да е мястото, където разборът е спрял—не непременно началото на първоначалната грешка.
Вашият JSON е маркиран като невалиден. Обикновено е дребен синтактичен проблем, не счупен файлов формат. Седемте грешки по-долу причиняват повечето Unexpected token.
Защо JSON се чупи толкова лесно?
JSON е формат за данни със строг синтаксис. Литерал на обект JavaScript може да изглежда подобно и пак да е невалиден JSON. В стандартния JSON имената на свойства и низовете се нуждаят от двойни кавички, крайната запетая не е позволена, а коментарите не са част от формата.
1. Крайни запетаи
Излишната запетая след последното свойство е проблемът. Стандартният JSON не я позволява.
Невалиден
{
"name": "Alex",
"age": 30,
}
Валиден
{
"name": "Alex",
"age": 30
}
Същото правило важи за масиви. Премахнете запетаята след последния елемент.
Невалиден
[
"red",
"green",
]
Валиден
[
"red",
"green"
]
2. Единични кавички вместо двойни
JavaScript често приема единични кавички. JSON не. Имената на свойства и низовите стойности трябва да използват двойни кавички.
Невалиден
{
'name': 'Alex'
}
Валиден
{
"name": "Alex"
}
3. Имена на свойства без кавички
В JavaScript понякога можете да напишете name без кавички. В JSON всяко име на свойство трябва да е низ с двойни кавички.
Невалиден
{
name: "Alex",
age: 30
}
Валиден
{
"name": "Alex",
"age": 30
}
4. Липсващи запетаи между стойности
Между свойства и елементи на масив е нужна запетая. Парсерът може да съобщи Unexpected token при следващите кавички или скоба, не при самата липсваща запетая.
Невалиден
{
"name": "Alex"
"age": 30
}
Валиден
{
"name": "Alex",
"age": 30
}
5. Липсващи или излишни скоби
Обектите използват { }. Масивите използват [ ]. Вложеният JSON често се проваля, когато липсва ], има излишна } или са разменени. Пребройте двойките отваряне и затваряне.
Невалиден
{
"items": [1, 2
}
Валиден
{
"items": [1, 2]
}
6. Невалидни escape последователности
В JSON низ обратната наклонена черта започва екраниране. Последователности като ", \ и \n са валидни. Windows път, записан C:\Users, не е: \U не е законно JSON екраниране. Удвоете обратните черти, иначе парсерът спира на този знак.
Невалиден
{"file":"C:\Users\Alex"}
Валиден
{"file":"C:\\Users\\Alex"}
7. Коментари вътре в JSON
Стандартният JSON няма коментари. Някои инструменти за настройки приемат // или /* */ (JSONC, JSON5 и подобни). Това не е стандартен JSON и JSON.parse го отхвърля.
Невалиден
{
// user name
"name": "Alex"
}
Какво означава Unexpected token?
Парсерът срещна знак, който не е позволен на тази позиция. Съобщеното място е където четенето спря. Ако по-рано сте пропуснали запетая, грешката може да сочи към кавичките на следващото свойство. Формулировката зависи от средата за изпълнение; не очаквайте всеки браузър да отпечата същото изречение.
Какво означава Unexpected end of JSON input?
Текстът свърши преди стойността да е пълна. Типични причини: липсваща } или ], отрязан вход, празно тяло или прекъснат API отговор. Не е една единствена грешка.
Защо JSON.parse() се проваля?
JSON.parse() приема само валиден JSON текст. Това успява:
const text = '{"name":"Alex"}';
const data = JSON.parse(text);
Това се проваля, защото единичните кавички не са JSON:
const text = "{'name':'Alex'}";
JSON.parse(text);
Точното съобщение за грешка зависи от средата за изпълнение на JavaScript. Смятайте съобщението за подсказка, после проверете запетаи, кавички и скоби близо до тази позиция.
Литерал на обект JavaScript може да изглежда като { name: 'Alex' }. Валидният JSON трябва да изглежда като { "name": "Alex" }: имена и низове с двойни кавички, без крайна запетая, без коментари.
- JSON текст
- Парсерът чете токени
- Валидни данни или Unexpected token
Как бързо да намерите JSON грешка
Работете в този ред. Не започвайте с преписване на целия файл.
- Пуснете JSON през валидатор.
- Прочетете първата съобщена грешка.
- Погледнете малко преди съобщената позиция.
- Проверете запетаите, особено крайните и липсващите.
- Проверете кавичките: само двойни.
- Съвпадете { } и [ ].
- Проверете екранирането с обратна черта в низовете.
- Премахнете коментарите, ако ви трябва строг JSON.
Бърза карта на обичайните поправки:
| Проблем | Поправка |
|---|---|
| Крайна запетая | Изтрийте запетаята след последния елемент. |
| Единични кавички | Използвайте двойни кавички за имена и низове. |
| Ключ без кавички | Обвийте името на свойството в двойни кавички. |
| Липсваща запетая | Сложете запетая между свойства или елементи на масив. |
| Липсваща скоба | Затворете всяка двойка { } и [ ]. |
| Невалидно екраниране | Използвайте законно екраниране или удвоете обратните черти в пътища. |
| Коментар | Премахнете // и /* */ за стандартен JSON. |
Проверете и форматирайте JSON в браузъра
NEXNARA Форматиране и сравнение на JSON може да провери JSON на това устройство.
Можете да валидирате, да подредите с 2 интервала, 4 интервала или табулация, minify, да сравните два документа (JSON Diff) и да отворите .json файл. Разборът използва JSON.parse в браузъра, не eval.
Документи по-големи от 5 MB могат да се усещат бавни. Текст по-голям от 15 MB не се обработва в браузъра, за да остане страницата отзивчива.
Самата обработка на JSON се случва във вашия браузър. Текстът не се изпраща към сървър на NEXNARA за този инструмент. Рекламите и други функции на сайта все още използват мрежата; това е отделно от обработката.
Трябва да проверите невалиден JSON? Отворете Форматиране и сравнение на JSON и поставете текста.
FAQ
Защо JSON-ът ми казва Unexpected token?
Парсерът срещна знак, който не е позволен там. Истинската грешка—често липсваща запетая или единични кавички—може да седи точно преди тази позиция.
Позволени ли са крайни запетаи в JSON?
Не. Стандартният JSON не позволява запетая след последното свойство или елемент на масив. Литералите на обекти JavaScript често позволяват.
Може ли JSON да използва единични кавички?
Не. Имената на свойства и низовете трябва да използват двойни кавички.
Може ли JSON да съдържа коментари?
Не в стандартния JSON. Някои инструменти приемат JSONC или JSON5 с коментари; JSON.parse все пак ги отхвърля.
Защо JSON.parse() се проваля?
Низът не е валиден JSON. Типични причини са крайна запетая, единични кавички, ключове без кавички, коментари или отрязана стойност. Точното съобщение зависи от средата за изпълнение.
Как да проверя дали JSON е валиден?
Поставете го във валидатор като Форматиране и сравнение на JSON или извикайте JSON.parse в конзола. Ако разборът хвърли изключение, текстът не е валиден JSON.