
JSON: форматирование, валидация и ремонт сломанного
Вставьте ответ API, конфиг или фрагмент лога — получите читабельный вид, дерево и список всего, что не соответствует стандарту, с точной строкой и позицией. Всё разбирается в вашем браузере: данные никуда не отправляются и нигде не сохраняются.
.json — файл читается локально. Вставлять можно и то, что ещё не является валидным JSON: лог, ответ API с комментариями, фрагмент с конечными запятыми.
Ключи и порядок сохранены, запись чисел не изменена.
Вставьте JSON выше и нажмите «Обработать».
Вставьте JSON выше и нажмите «Обработать».
Данные не покидают ваш браузер — разбор и форматирование выполняются локально, без отправки на сервер.
Четыре редакции стандарта и чем они отличаются
JSON описан несколькими документами, и они не тождественны. Выбор спецификации меняет то, что инструмент считает ошибкой. RFC 4627 (2006) — первоначальная. Документ верхнего уровня может быть только объектом или массивом; отдельное число или строка недопустимы. Именно на эту редакцию до сих пор опираются некоторые старые библиотеки. RFC 7159 (2014) — разрешила любое значение на верхнем уровне. С тех пор 42 и "текст" — самодостаточные документы JSON. RFC 8259 (2017) — действующая. Добавила требование UTF-8 для обмена между системами и закрепила, что имена в одном объекте должны быть уникальными. ECMA-404 — описывает только синтаксис. Дубликаты ключей она не запрещает, непарные суррогаты не упоминает, поэтому набор предупреждений здесь самый короткий. Если сомневаетесь — оставляйте RFC 8259: это самый строгий из действующих наборов правил, и то, что прошло его, примут везде.
Почему собственный разбор, а не JSON.parse браузера
Встроенный парсер сделан для скорости, а не для диагностики. На одинаковых данных он молчит там, где инструмент должен говорить: Сообщение без координат. Браузер говорит «Unexpected token» и смещение в символах; здесь — строка, позиция и что именно ожидалось. Одна ошибка на весь документ. После первого сбоя разбор восстанавливается и показывает остальные, а не заставляет исправлять по одной. Дубликаты ключей проходят молча. JSON.parse оставляет последнее значение, и потерю замечают уже в продакшене. Запись чисел теряется. 1.0 становится 1, а целое больше девяти квадриллионов меняет последние цифры — именно так ломаются идентификаторы из базы. Порядок ключей в выводе сохраняется таким, как в источнике, пока вы сами не попросите сортировку. Числа здесь по умолчанию выводятся так, как были записаны: инструмент показывает документ, а не результат его интерпретации.
Что именно чинит режим исправления
Реальные данные редко бывают чистым JSON. Режим ремонта приводит к стандарту то, что приезжает из конфигов, логов и чужих API: комментарии // и /* */ — удаляются; запятые перед закрывающей скобкой — убираются; одинарные и «ёлочные» кавычки — приводятся к двойным; ключи без кавычек и числовые ключи — берутся в кавычки; True, NULL, None, undefined — становятся true, false, null; NaN и Infinity — становятся null, потому что чисел без конечного значения в JSON нет; запись чисел — лишний плюс, точка на краю, нули в начале; управляющие символы внутри строк — экранируются; BOM в начале файла и обёртка JSONP — снимаются. Ни одно исправление не делается молча: каждое попадает в список с количеством случаев. Если результат вас не устраивает — флажок выключается, и документ проверяется как есть.
