Дані · 3 хв читання ·

Невалідний JSON? 7 помилок, через які він ламається

Зайві коми, одинарні лапки, коментарі та інше: дрібні промахи, що ламають JSON, як швидко їх знайти й як виправити кожен.

«Unexpected token» і «Unexpected end of JSON input» — одні з найчастіших помилок, які бачать розробники. JSON — суворий формат, значно суворіший за JavaScript, з якого він виріс, і майже кожен збій зводиться до однієї з кількох типових помилок.

1. Кома в кінці

Кома після останнього елемента об’єкта чи масиву — помилка номер один. JavaScript її приймає, стандарт JSON — ні.

{"name": "Ana", "age": 31,}   ✗
{"name": "Ana", "age": 31}    ✓

2. Одинарні лапки та 3. ключі без лапок

Кожен ключ і кожен рядок мають бути в подвійних лапках. {name: 'Ana'} — коректний JavaScript, але невалідний JSON; треба писати {"name": "Ana"}.

4. Коментарі

У JSON немає коментарів. // і /* */ — це помилка, що дивує всіх, хто копіює з конфігураційного файлу у форматі JSON5 або JSONC, наприклад із налаштувань VS Code.

5. Особливі значення та 6. неекрановані символи

undefined, NaN, Infinity і функцій у JSON немає; використовуйте null або число. Усередині рядка подвійні лапки записують як \", зворотну скісну риску — як \\, а перенесення рядка — як \n. Шляхи Windows — класична пастка: у "C:\new" міститься перенесення рядка, а не зворотна скісна риска й літера n.

7. Бракує дужок або є зайві

Пропущена закрита } або ] зазвичай проявляється як помилка в самому кінці тексту, далеко від справжньої проблеми. Якщо відформатувати JSON із відступами, одразу видно, який рівень зламано.

Помилки, які важко побачити

Деякий невалідний JSON на екрані виглядає бездоганно:

  • Типографські лапки. Текст із текстового редактора, месенджера чи презентації часто містить “ і ” замість прямих подвійних лапок. Вони майже однакові на вигляд, але JSON приймає лише прямий символ ".
  • Мітка порядку байтів (BOM). Деякі редактори у Windows зберігають файли з невидимим символом на початку. JSON.parse у JavaScript і json.loads у Python його відкидають, а помилка вказує на позицію 0.
  • Нерозривні пробіли та інші невидимі символи, вставлені з вебсторінок.

Валідний JSON, який усе одно спричиняє баги

json.dumps у Python за замовчуванням пише NaN та Infinity, а інші парсери їх не приймають; передайте allow_nan=False, щоб виявити це заздалегідь. Дуже великі цілі числа, як-от 64-бітні ідентифікатори з бази даних, є валідним JSON, але в JavaScript втрачають точність після 9007199254740991, тому багато API передають їх рядками. Більшість парсерів допускає повторювані ключі, але мовчки перемагає останнє значення.

Як читати повідомлення про помилку

Парсер повідомляє, де він здався, а не де ви помилилися. Пропущену кому зазвичай вказують на початку наступного ключа, а пропущену закривальну дужку — в самому кінці введення. Дивіться трохи раніше за вказану позицію.

{
  "name": "Ana"
  "age": 31        ← помилку вказано тут (рядок 3)
}                   пропущена кома — в кінці рядка 2

Знайти точне місце

Валідатор JSON від 4Dev перевіряє текст за стандартом JSON (RFC 8259) і показує рядок і стовпчик першої помилки, а також пропонує виправлення. Він перевіряє синтаксис, а не зміст: валідний JSON усе одно може мати неправильний тип або пропущене поле для вашого застосунку.

Відкрити валідатор JSON

LinkedInXFacebook