UTILS.
100% в браузере
{ }

JS-объект в строгий JSON

Почините вольный литерал JavaScript-объекта — некавыченные ключи, одинарные кавычки, висячие запятые, комментарии — в строгий валидный JSON, без eval.

— результат появится здесь —

Об этом инструменте

Инструмент JS-объект в строгий JSON чинит вольный литерал объекта JavaScript или в стиле JSON5 в строгий валидный JSON. Он построен на рукописном токенизаторе — он никогда не использует eval или new Function — поэтому безопасен при строгой Content Security Policy и безопасен для вставки недоверенного текста. Всё работает в вашем браузере.

Он принимает то, что настоящий JSON отвергает: некавыченные ключи-идентификаторы, строки в одинарных кавычках, висячие запятые перед ] или }, // строчные и /* блочные */ комментарии, шестнадцатеричные (0xFF), восьмеричные и двоичные литералы, числа с ведущим плюсом и ведущей точкой (+1, .5), а также значения undefined, NaN и Infinity. Ключи заново заключаются в двойные кавычки, строки корректно перекавычиваются, комментарии и висячие запятые удаляются, а числа нормализуются в обычные числа JSON. Вы выбираете, как трактовать undefined (преобразовать в null или удалить ключ) и нефинитные числа (преобразовать в null или вызвать ошибку), затем значение заново сериализуется через JSON.stringify с выбранным вами отступом — 2 пробела, 4 пробела, табуляции или минифицировано.

Когда ввод не удаётся разобрать, инструмент сообщает о первой синтаксической ошибке с её строкой и столбцом, чтобы вы быстро нашли проблему. Это дополняет строгий форматтер JSON, который просто отвергает вольный ввод — здесь цель в том, чтобы спасти скопированный вывод консоли, фрагменты конфигов и отредактированные вручную объекты в JSON, который примет любой парсер.

Часто задаваемые вопросы

Какой вольный синтаксис он принимает?
Некавыченные ключи, строки в одинарных кавычках, висячие запятые, // и /* */ комментарии, шестнадцатеричные/восьмеричные/двоичные числа, числа с ведущим плюсом и ведущей точкой, а также литералы undefined, NaN и Infinity — типичные вещи, которые делают скопированные JS-объекты невалидными как JSON.
Использует ли он eval для разбора?
Нет. Он использует рукописный токенизатор и парсер рекурсивного спуска, никогда eval или new Function, так что работает при строгой Content Security Policy и безопасен для недоверенного ввода. Он всегда производит только данные, никогда не выполняет код.
Как обрабатываются undefined, NaN и Infinity?
В JSON нет таких значений. Вы выбираете: undefined может стать null или его ключ может быть удалён, а NaN/Infinity могут стать null или вызвать ошибку. Так вывод в любом случае остаётся строго валидным JSON.
Что происходит, когда ввод невалиден?
Парсер останавливается на первой настоящей синтаксической ошибке и сообщает о ней со строкой и столбцом, где она произошла, чтобы вы могли найти и исправить проблемный символ, а не гадать.

Больше инструментов