Преобразовать .env в JSON и JSON в .env: типы значений, кавычки, export, комментарии, многострочные значения, вложенные ключи и таблица ошибок с номером строки.
Направление перевода: файл окружения в JSON или JSON в файл окружения
DATABASE__HOST и DATABASE__PORT соберутся в объект DATABASE. Имена через точку останутся плоскими ключами, как в файле
Сколько пробелов на каждый уровень вложенности
Файл .env — плоский список пар «имя=значение», который читает загрузчик вроде dotenv при старте приложения. Формат удобен человеку и неудобен программе: типов в нём нет, поэтому «PORT=8080» и «DEBUG=true» приходят в код строками, вложенности нет, а комментарии живут в тех же строках, что и данные. JSON, наоборот, различает числа, логические значения и null, умеет вложенные объекты — но комментариев не знает вовсе. Перевод нужен там, где переменные окружения уезжают туда, где ждут JSON: в тесты, в конфигурацию CI, в схему для проверки настроек, в docker compose или в чужой сервис.
Разбор идёт своим кодом, а не библиотекой, и это не только вопрос размера страницы. У dotenv значение обрывается на первом символе «#» даже внутри слова, поэтому «PASSWORD=abc#123» превратилось бы в «abc»; здесь комментарий начинается только там, где перед решёткой стоит пробел. Поддерживаются «export» в начале строки, одинарные кавычки с буквальным текстом, двойные кавычки с последовательностями «\n», «\t», «\\» и «\"», значения из нескольких строк и повтор имени, при котором побеждает последнее значение — как при загрузке. Строки, которые прочитать не удалось, не исчезают: они попадают в таблицу с номером и причиной, а это первое, что нужно знать про чужой .env, который «почему-то не работает».
Рядом таблица переменных: имя, значение, распознанный тип, номер строки, комментарий и примечания вроде «перекрыто значением из строки 23». Перевод обратим в обе стороны: комментарии переживают поездку в JSON полями «//ИМЯ», вложенные ключи собираются в дерево и разворачиваются обратно, а кнопка «В исходник» переносит результат в поле ввода и меняет направление — так видно, что файл собирается обратно тем же. Всё считается в браузере: ни одна строка не отправляется на сервер и не сохраняется, а страница работает офлайн.
Вставьте содержимое файла .env в поле слева — разбор идёт по мере ввода, кнопки «Конвертировать» нет. Справа сразу появляется JSON: имена переменных становятся ключами объекта, значения — их значениями. Понимаются строки «KEY=value» и «export KEY=value», значения в одинарных и двойных кавычках, комментарии, значения из нескольких строк (сертификаты и ключи переносят строку внутри кавычек) и комментарий после значения. Обратный перевод — не отдельная страница, а переключатель «Режим»: JSON собирается в .env теми же правилами, а кнопка «В исходник» переносит результат в поле ввода и меняет направление, чтобы это было видно.
Тип определяется по тексту значения: «true» и «false» становятся логическими, «null» — null, а похожее на число («8080», «-3.5», «1e5») — числом. Всё остальное остаётся строкой. Исключения заведены для значений, которые числом быть не должны: «007», «1_000», «0x1f» и «Infinity» остаются строками, иначе артикул потерял бы ведущий ноль, а в JSON появилось бы число, которого в файле не было. В .env типов нет вовсе — там всё строки, — поэтому распознавание можно выключить флажком «Все значения строками»: тогда JSON получится из одних строк, а файл при обратном переводе соберётся ровно таким же. Кавычки в файле распознавание не отменяют: «PORT="3000"» всё равно станет числом.
Да, в обе стороны. В JSON комментариев нет, поэтому комментарий к переменной уходит соседним полем с именем «//ИМЯ» и стоит перед своим ключом: «"//APP_NAME": "Название сервиса"» рядом с «"APP_NAME": "normtool"». Комментарий в начале файла, который ни к какой переменной не относится, записывается полем «//». При обратном переводе такие поля снова становятся строками с решёткой над своей переменной, а в таблице переменных комментарий виден отдельной колонкой. Комментарий после значения при переносе сдвигается: он станет строкой выше переменной, потому что другого места для него в файле нет. Если комментарии не нужны, снимите флажок «Переносить комментарии» — в JSON останутся только пары «ключ: значение».
Имена вида «DATABASE__HOST» — общепринятый способ записать вложенность в плоском файле: двойное подчёркивание понимают docker compose, Spring Boot и .NET. Выберите разделитель «__», и такие имена станут объектом «DATABASE: { HOST: ... }»; разделитель «.» соберёт так же имена вида «SMTP.HOST», которые тоже попадаются в файлах. Третий вариант — «не собирать»: тогда ключи останутся плоскими, как в файле. Если имя стоит и само по себе, и как ветка («A» и «A__B»), в JSON они несовместимы: побеждает ветка, а конфликт попадает в таблицу проблем. Массивы не собираются: по имени «A__0» невозможно понять, что имелся в виду массив, — такие ключи остаются как есть.
Строки, которые не удалось прочитать как переменные, — с номером и причиной: нет знака равенства, пробел внутри имени, недопустимый символ в имени, незакрытая кавычка, лишний текст после закрывающей кавычки, повтор ключа. Мешает чтению только часть из них. При повторе побеждает последнее значение — так же ведёт себя dotenv, — а в таблице видно, какая из двух строк перекрыта; строка с пробелом в имени или без равенства переменной не станет и в результат не попадёт, потому что молча выбросить её значило бы соврать о содержимом файла. Ошибочные строки из поля не удаляются: правьте исходник, и таблица обновится сразу.
Нет, ни строчки. Разбор .env, сборка JSON, определение типов, перенос комментариев, вложенные ключи и запись обратно выполняются на JavaScript в самой странице: текст не уходит на сервер, не сохраняется и не попадает в логи. Для этого инструмента вопрос стоит острее обычного — в .env лежат пароли, токены и строки подключения к базе, и отправлять их куда-либо нельзя. Проверить можно, отключив интернет: страница продолжит работать, потому что ни запросов, ни внешних библиотек у неё нет.
В режиме «JSON → .env» кавычки задаются списком: двойные, одинарные или «только там, где нужны». Последний вариант стоит по умолчанию: значение пишется без кавычек только тогда, когда прочитается ровно таким же. Пробелы внутри или по краям, решётка, кавычка, обратный слэш — значение берётся в двойные кавычки; строка, похожая на число («2.0»), тоже, иначе она вернулась бы числом. Логические значения и null пишутся словами и кавычек не получают, а пустое значение остаётся «KEY=». В одинарных кавычках текст буквальный, поэтому переносы строк в них остаются настоящими. Флажок «Префикс export» добавит «export » в начало каждой строки, перевод строки переключается между LF и CRLF. Готовый файл скачивается кнопкой «Скачать .env» или переносится в поле ввода кнопкой «В исходник».