JSON похож на синтаксис JavaScript, но его переносимая грамматика намеренно уже. Имена полей и строки используют двойные кавычки, числа следуют конечной десятичной грамматике, а вне токенов допустимы только четыре пробельных символа. Комментарии и лишние запятые удобны в некоторых конфигурациях, но их принятие означало бы разбор другого языка. JSONClear сохраняет границу явной: проверяет строгий JSON и показывает первую позицию, где текст больше не соответствует грамматике.
Имена и строки требуют двойных кавычек
`{'name':'Ada'}` понятен разработчику JavaScript, но это не JSON. Строгая запись — `{"name":"Ada"}`. Имя без кавычек в `{name:"Ada"}` тоже вне грамматики. JSONClear не угадывает нужные кавычки и не переписывает апострофы в обычном тексте. Он останавливается в позиции имени поля, чтобы автор осознанно исправил источник и сохранил предполагаемое содержимое строки.
Комментарии и лишние запятые относятся к другим языкам
После поля объекта или элемента массива строгий JSON допускает запятую только перед следующим элементом. Поэтому `{"a":1,}` и `[1,2,]` неверны. `// note` и `/* note */` не являются пробелами и тоже отклоняются. Автоисправление может скрыть обрезанный элемент или изменить строку с законной пунктуацией. JSONClear показывает границу. Для JSON5 или модуля JavaScript нужен инструмент, явно поддерживающий этот язык, а не переименование в JSON.
Числа JSON исключают специальные значения JavaScript
JSON принимает конечные десятичные токены `-0`, `12.50` и `1e-9`. Он отклоняет `NaN`, `Infinity`, `0x10`, ведущий плюс и ведущие нули вроде `01`. Эти формы относятся к JavaScript или дают неоднозначное переносимое поведение. JSONClear проверяет символы токена без преобразования в Number. Это сохраняет строгую грамматику и не позволяет переписать корректные длинные целые и десятичные числа.