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.