Skip to content

Всё для WordPress, веб-разработки — и не только

JSON: форматирование, валидация и ремонт сломанного

JSON: форматирование, валидация и ремонт сломанного

Вставьте ответ API, конфиг или фрагмент лога — получите читабельный вид, дерево и список всего, что не соответствует стандарту, с точной строкой и позицией. Всё разбирается в вашем браузере: данные никуда не отправляются и нигде не сохраняются.

Перетащите сюда .json — файл читается локально. Вставлять можно и то, что ещё не является валидным JSON: лог, ответ API с комментариями, фрагмент с конечными запятыми.
Обработка

Ключи и порядок сохранены, запись чисел не изменена.

Вставьте 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 — снимаются. Ни одно исправление не делается молча: каждое попадает в список с количеством случаев. Если результат вас не устраивает — флажок выключается, и документ проверяется как есть.

Частые вопросы