JSON Toolkit

Чи може JSON мати коментарі

Головне: У RFC 8259 немає синтаксису коментарів, тож `//` і блокові коментарі змушують JSON.parse кидати виняток. Натомість використовуйте JSON5 або JSONC, поле `_comment`, опис Schema чи YAML.

Початковий~3 хв читанняОпубліковано 2026-10-30Оновлено 2026-10-30
Чому в JSON немає коментарів і що використовувати натомість

Коротко: ніколи не кладіть коментарі в стандартний JSON; використовуйте JSONC або JSON5 для локальної конфігурації, яку редагують лише люди, переносьте пояснення в description JSON Schema, коли файл перетинає системи, і переходьте на YAML чи TOML, коли обсяг анотацій зростає.

Ні.

Будь-який парсер, що відповідає стандарту, відхиляє це:

{
  "port": 8080 // local development only
}

Chrome повідомляє SyntaxError: Unexpected token }. Парсер натрапив на /, що не може починати жодне значення JSON, і зупинився.

Чому специфікація навмисно лишає коментарі поза межами

RFC 8259 визначає шість значень: обʼєкт, масив, число, рядок, true/false, null. Продукції коментаря немає.

Коментарі пропонували рано й відхилили з конкретної причини: щойно коментарі стають законними, хтось починає використовувати їх для директив — умовних включень, змінних шаблонів — і кожен парсер вирощує власний діалект. Сумісність ламається на першому переході. JSON навмисно є лише даними, нічого виконуваного всередині.

Чотири способи зберегти примітки

1. Використовуйте надмножину. JSON5 і JSONC приймають обидва стилі коментарів. settings.json і tsconfig.json у VS Code — це JSONC. Ціна реальна: JSON.parse усе одно їх відхиляє, а API, конвеєри логів і черги повідомлень зазвичай приймають лише стандартний JSON. Ваш коментар мовчки відкидається або кидає виняток десь нижче за течією.

2. Покладіть примітку в дані.

{
  "_comment": "port assigned by ops, do not change",
  "port": 8080
}

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

3. Використайте опис Schema. description призначений для людей і інструментів. Валідатори його показують, редактори показують при наведенні, і він ніколи не потрапляє в навантаження. Це єдиний варіант, що виживає в довготривалій підтримці, не ламаючи сумісності.

4. Змініть формат файлу. Якщо файл існує, щоб його редагували вручну, YAML або TOML рідно підтримують коментарі. Боротьба з JSON тут — марна праця.

Вибір

Ситуація Відповідь
Надсилається в іншу систему, через API чи чергу Без коментарів; документуйте в Schema або зовнішній документації
Конфігурація, що читають лише люди й редактори JSONC, із розширенням .jsonc
Потрібен універсальний інструментарій і вбудоване пояснення Стандартний JSON плюс description Schema
Довга конфігурація з великою кількістю анотацій Перейдіть на YAML

Часті питання

Чому поле _comment забруднює модель?

Бо воно стає частиною даних. Кожен споживач має знати, які ключі ігнорувати, а визначення типу отримує поле, що не є справжніми бізнес-даними.

Чи має пояснення жити в описі JSON Schema?

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

Чи може JSON.parse розібрати JSONC або JSON5?

Ні. JSON.parse усе одно відхиляє коментарі, а API, конвеєри логів і черги повідомлень зазвичай приймають лише стандартний JSON, тож коментар відкидається або кидає виняток десь нижче за течією.

Інструменти

  • Парсер JSON5 — вставте конфігурацію з коментарями й побачте розвʼязану структуру
  • Форматувальник і валідатор JSON — недопустимий JSON повідомляється з рядком і стовпцем, тож проблемний коментар очевидний

Додаткове читання