Tech Help
Чести JSON грешки: завршна запирка, наводници и Unexpected token
Поправете невалиден JSON: завршна запирка, единечни наводници, клучеви без наводници и Unexpected token. Зошто JSON.parse паѓа и како да проверите JSON.
Повеќето JSON грешки доаѓаат од строги правила: завршна запирка, единечни наводници, имиња на својства без наводници, недостасувачка запирка, несовпаднати загради, невалиден escape или коментари.
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 ниска, обратната коса црта започнува escape. Низи како ", \ и \n се валидни. Windows патека C:\Users не е: \U не е законит JSON escape. Удвојте ги обратните црти, инаку парсерот запира на тој знак.
Невалидно
{"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 низ валидатор.
- Прочитајте ја првата пријавена грешка.
- Погледнете малку пред пријавената позиција.
- Проверете ги запирките, особено завршните и недостасувачките.
- Проверете ги наводниците: само двојни.
- Упарете { } и [ ].
- Проверете escape со обратна коса црта во ниските.
- Отстранете ги коментарите ако ви треба строг JSON.
Брза карта на вообичаени поправки:
| Проблем | Поправка |
|---|---|
| Завршна запирка | Избришете ја запирката по последниот елемент. |
| Единечни наводници | Користете двојни наводници за имиња и ниски. |
| Клуч без наводници | Обвијте го името на својството со двојни наводници. |
| Недостасувачка запирка | Ставете запирка меѓу својства или елементи на низа. |
| Недостасувачка заграда | Затворете го секој пар { } и [ ]. |
| Невалиден escape | Користете законит escape, или удвојте ги обратните црти во патеки. |
| Коментар | Отстранете // и /* */ за стандарден 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.