JSON форматтер

Работает офлайнНичего не загружаетсяБесплатно, без регистрации

Разбирается собственным JSON-движком вашего браузера. Токены и записи из ваших данных не покидают устройство.

Форматируйте, сжимайте и проверяйте JSON — или преобразуйте его в YAML либо CSV. Ошибки указывают точную строку и столбец, а четыре самые частые причины называются по имени.

Что JSON не разрешает

JSON — строгое подмножество синтаксиса объектов JavaScript, и различия подводят всех. Всё это некорректно:

НеверноВерноПричина
{name: "Ada"}{"name": "Ada"}Ключи должны быть в кавычках
{'a': 1}{"a": 1}Только двойные кавычки
[1, 2, 3,][1, 2, 3]Никаких запятых в конце
{"a": 1} // note{"a": 1}Комментарии запрещены
{"a": undefined}{"a": null}undefined не является значением JSON
{"a": .5}{"a": 0.5}Нужна цифра перед точкой

Предел точности

Сам JSON не ограничивает размер числа, но JavaScript разбирает любое число в 64-битное с плавающей точкой. Начиная с 2⁵³ − 1, то есть с 9 007 199 254 740 991, целые числа молча округляются. Вставьте 9007199254740993 — вернётся 9007199254740992: вставленный сюда 64-битный идентификатор базы данных окажется незаметно неверным, и ни один форматировщик этого не предотвратит.

Правильное исправление — на стороне API: отдавайте большие идентификаторы строками. Если вы разбираетесь, почему ID в базе и ID в JSON не совпадают, начинать нужно с этого.

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

Почему мой JSON не разбирается?

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

Отправляются ли мои данные куда-нибудь?

Нет. Разбор и форматирование выполняет собственный JSON-движок браузера, локально. Для этого инструмента это важнее, чем кажется: в онлайн-форматировщики регулярно вставляют ответы API с токенами, данными клиентов и внутренними идентификаторами.

Чем форматирование отличается от сжатия?

Данные получаются одинаковыми. Форматирование добавляет отступы и переводы строк, чтобы структуру мог прочитать человек; сжатие убирает каждый необязательный пробел, чтобы объём был минимальным. Сжимайте для передачи и хранения, форматируйте для чтения и сравнения.

Почему изменились мои большие числа?

Числа в JavaScript — это 64-битные числа с плавающей точкой, поэтому любое целое больше 9 007 199 254 740 991 теряет точность. Это обычная проблема с 64-битными идентификаторами баз данных и снежинками вроде твиттерских. Если у вас такие ID, API должен отдавать их строками. Это ограничение JSON в JavaScript, а не этого инструмента.

Похожие инструменты