JSON проти JSON5 проти JSONC
Головне: Строгі надмножини за порядком: JSONC додає коментарі; JSON5 додає одинарні лапки, ключі без лапок, висячі коми й шістнадцяткові числа. Неправильний вибір ламає API, а не ваш редактор.

Коротко: використовуйте стандартний JSON щоразу, коли дані перетинають межу системи, і JSONC лише для локальної конфігурації, яку редагують люди; звертайтеся до JSON5, коли потрібні одинарні лапки, висячі коми чи ключі без лапок, але спершу підтвердьте, що завантажувач його підтримує.
Одним рядком: JSONC — це JSON плюс коментарі; JSON5 — це JSON плюс звички JavaScript.
Матриця можливостей
| Можливість | JSON | JSONC | JSON5 |
|---|---|---|---|
| Рядки в подвійних лапках | ✅ | ✅ | ✅ |
| Рядки в одинарних лапках | ❌ | ❌ | ✅ |
| Ключі без лапок | ❌ | ❌ | ✅ |
Рядкові коментарі // |
❌ | ✅ | ✅ |
Блокові коментарі /* */ |
❌ | ✅ | ✅ |
| Висячі коми | ❌ | ❌ | ✅ |
Шістнадцяткові числа 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| Багаторядкові рядки | ❌ | ❌ | ✅ |
| Читається стандартними парсерами | ✅ | ❌ | ❌ |
Зауважте, що JSONC розвʼязує лише коментарі. Багато хто припускає, що «JSON, який дозволяє коментарі», дозволяє й висячі коми; tsconfig.json усе одно зазнає збою на одній.
Для чого кожен
JSON — обмін. API, черги, JSON-стовпці баз даних, логи. Усе «машина-до-машини».
JSONC — конфігурація редактора. VS Code сам розбирає ці файли, тож JSON.parse їх ніколи не бачить. RFC немає; це де-факто конвенція під проводом Microsoft.
JSON5 — поблажлива надмножина для людей. Мета була «конфігурація, що виглядає як обʼєктний літерал JavaScript». Найкраще підходить для файлів .json5, які завантажують інструменти збірки; найширший синтаксис і найвужча підтримка інструментів.
Вибір
| Ситуація | Обрати |
|---|---|
| Тіла запитів або відповідей | JSON, без альтернатив |
| JSON-стовпці в MySQL / PostgreSQL | JSON, їхні функції не приймають нічого іншого |
| Конфігурація проєкту, що потребує пояснень | JSONC, якщо підтримується, інакше YAML |
| Хочете невимушеність у стилі JS | JSON5, після підтвердження, що завантажувач його підтримує |
| Редагуватимуть не інженери | YAML, відступи краще за дужки |
Одна легка пастка
Розбір файлу JSONC як строгого JSON дає помилку, що вказує на коментар:
SyntaxError: Unexpected token / in JSON at position 42
Перш ніж видаляти коментар, перевірте, чи файл не задуманий як JSONC. Видаліть його — і можете все одно натрапити на висячу кому двома рядками нижче.
Часті питання
Як обирати між JSONC і JSON5?
Використовуйте JSONC, коли коментарі — єдине, що потрібно: він додає // і /* */ поверх JSON, і settings.json та tsconfig.json у VS Code його використовують. Використовуйте JSON5, коли також хочете одинарні лапки, ключі без лапок, висячі коми, шістнадцяткові числа чи багаторядкові рядки. Обидва залежать від завантажувача, тож підтвердьте, що інструмент, який читає файл, їх підтримує.
Чому файл JSONC не можна читати як стандартний JSON?
JSONC — де-факто конвенція, а не окремий RFC, тож стандартні парсери відхиляють коментарі. JSON.parse на такому файлі кидає Unexpected token /, вказуючи на коментар, а не на дані. Як JSONC слід писати лише конфігурацію, що читається редактором або присвяченим парсером.
Чи надсилати файл JSON5 в API?
Ні. API, JSON-стовпці баз даних і черги розбирають строгий JSON, тож одинарні лапки, ключі без лапок і висячі коми JSON5 відхиляються. JSON5 — для локальної конфігурації, яку редагують люди; конвертуйте його в стандартний JSON, перш ніж він перетне межу системи.