JSON vs JSON5 vs 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, прежде чем он пересечёт границу системы.