Форматирование, сжатие и проверка
Форматирование расставляет отступы, чтобы человек видел структуру; сжатие убирает все необязательные пробелы, чтобы уменьшить объём передачи. Меняется только внешний вид: данные в обоих случаях одинаковы, поэтому переход между ними никогда не меняет значение.
Проверка пытается разобрать текст и сообщает, удалось ли. При неудаче она указывает и место, где разбор остановился, но это не там, где началась ошибка, а там, где стало невозможно двигаться дальше. Настоящая причина обычно чуть раньше по тексту.
Ширина отступа — дело вкуса и договорённости в команде. Два пробела берегут ширину при глубокой вложенности, четыре делают структуру легче для глаза, а ноль оставляет только переводы строк, что удобно, когда читаешь по одной записи.
Почему JSON обычно не разбирается
Запятая, оставшаяся после последней записи, — самая частая причина. Литералы объектов в JavaScript её допускают, а стандарт JSON нет, и её легко забыть после удаления записи. Загляните сначала прямо перед каждой закрывающей скобкой.
Одинарные кавычки — это не JSON. И ключи, и строковые значения требуют двойных кавычек, а привычка JavaScript оставлять ключи без кавычек сюда не переносится. Чаще всего это подводит, когда фрагмент скопирован прямо из исходного кода.
Комментарии тоже не входят в стандарт. Комментарии с двойной косой чертой, привычные в файлах настроек, допускают лишь расширения вроде JSON5 или JSONC, поэтому стандартному разборщику их нужно убрать. У NaN, Infinity и undefined представления тоже нет.