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. Сприймайте повідомлення як підказку, потім перевірте коми, лапки й дужки біля цієї позиції.

JSON — не те саме, що об’єкт JavaScript

Літерал об’єкта JavaScript може виглядати як { name: 'Alex' }. Валідний JSON має виглядати як { "name": "Alex" }: назви й рядки в подвійних лапках, без кінцевої коми, без коментарів.

  • Текст JSON
  • Парсер читає токени
  • Валідні дані або Unexpected token
Позначка помилки — де зупинився розбір, що може бути після справжньої помилки.

Як швидко знайти помилку JSON

Працюйте в цьому порядку. Не починайте з переписування всього файлу.

  1. Проженіть JSON через валідатор.
  2. Прочитайте першу повідомлену помилку.
  3. Подивіться трохи перед зазначеною позицією.
  4. Перевірте коми, особливо кінцеві й пропущені.
  5. Перевірте лапки: лише подвійні.
  6. Зіставте { } і [ ].
  7. Перевірте екранування зворотною рискою в рядках.
  8. Приберіть коментарі, якщо потрібен суворий 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.