Convertir .env a JSON

Convierte archivos .env a JSON y viceversa, con comillas y comentarios.

Tus secretos .env se quedan en tu equipo

Convertir un archivo .env a JSON

Sobre este convertidor de .env a JSON

Pega el contenido de un archivo .env y obtén un objeto JSON limpio, o pega JSON y recibe un .env válido. El parser entiende la sintaxis real de dotenv: prefijos export, comentarios de línea completa y en línea, comillas simples (literales) frente a comillas dobles (que expanden los escapes \n, \t y \"), valores vacíos y claves duplicadas — gana la última, con una advertencia. Las líneas inválidas se reportan con su número de línea para que las corrijas rápido.

En la otra dirección, las cadenas, los números y los booleanos se escriben como valores de .env y solo llevan comillas cuando hace falta: espacios, #, = o saltos de línea. Los objetos anidados no son válidos en un .env, así que la herramienta lista las claves problemáticas o, con una casilla, las aplana en claves tipo DB__HOST en mayúsculas. Los archivos de entorno son justo donde viven las claves de API y las contraseñas, así que todo corre localmente en tu navegador: tus secretos nunca salen de tu equipo.

Formato de un archivo .env: sintaxis, comentarios y comillas

No existe una especificación para los archivos .env. Cada librería dotenv implementa su propio dialecto, así que un archivo que carga sin problemas en Node puede comportarse distinto en Python o en Ruby. La tabla de abajo es el núcleo común en el que esas implementaciones coinciden, y es exactamente lo que acepta el convertidor de arriba, línea por línea.

ReglaEjemploQué pasa
Un KEY=VALUE por líneaDB_PORT=5432El valor es la cadena "5432". Un archivo .env no lleva tipos, así que los números y booleanos salen del convertidor como cadenas JSON.
Prefijo export opcionalexport DB_HOST=localhostEl prefijo se quita y la clave es DB_HOST. Cualquier cantidad de espacio después de export está bien.
Comentario de línea completa# solo para desarrollo localLa línea se ignora. Se permiten espacios antes del #, y las líneas en blanco también se saltan.
Comentario en líneaPORT=3000 # equipo de devEl valor es 3000. En un valor sin comillas, el # solo inicia un comentario cuando hay un espacio antes, así que URL=site.com/#top conserva su #.
Valor sin comillasNAME= ada El espacio a ambos lados del valor se recorta y queda "ada". El espacio alrededor del = también se recorta.
Las comillas simples son literalesMSG='hi\nthere'No se expande nada. La barra invertida y la n quedan como dos caracteres separados, y un # dentro de las comillas sigue siendo parte del valor.
Las comillas dobles expanden escapesMSG="hi\nthere"\n, \t, \r, \" y \\ se convierten en los caracteres reales. Un escape que el formato no define, como \q, se deja tal cual lo escribiste.
Valor vacíoOPTIONAL=Válido. La clave existe y su valor es una cadena vacía, que no es lo mismo que la clave no estar.
Nombre de la claveA-B=1 se rechazaUna clave debe empezar con letra o guion bajo y luego usar letras, dígitos, guiones bajos o puntos. Así que my.key y lower_case se aceptan; un guion o un dígito inicial no.
Claves duplicadasA=1 y luego A=2Gana la última asignación, porque un objeto JSON no puede tener la misma clave dos veces. El convertidor nombra la clave repetida en vez de elegir en silencio.
Valores multilíneaUna comilla que queda abierta al final de la líneaNo se admite. Un valor entre comillas tiene que cerrarse en la misma línea; escribe \n dentro de comillas dobles para lograr un salto de línea.
# Base de datos
export DATABASE_URL=postgres://user:pass@localhost:5432/app
PORT=3000                  # comentario en línea: necesita un espacio antes del #
GREETING="hello\nworld"    # se convierte en un salto de línea real
LITERAL='hello\nworld'     # se queda como barra invertida + n
EMPTY=
Pega esto en el cuadro de arriba para ver cómo se aplica cada regla. Las líneas inválidas se reportan con su número de línea y el motivo, así que un = faltante, una comilla sin cerrar o un nombre de clave inválido se nombra en vez de descartarse en silencio.

Las dos cosas que el formato simplemente no puede hacer son los tipos y el anidamiento: un puerto es la cadena "3000", y un objeto JSON no tiene dónde ir dentro de una lista plana de pares. Por eso el convertidor de arriba reporta las claves anidadas como un error en vez de inventarles una forma.

¿Se expande ${VAR}? Expansión de variables según el cargador

Que un ${VAR} dentro de un valor se reemplace por el valor de otra variable depende por completo del cargador que lee el archivo. Los valores por defecto no coinciden, así que conviene saber cuál usa tu proyecto antes de depender de ello:

Cargador¿Expande ${VAR} por defecto?$ literal / desactivar la expansión
dotenv (Node)NoGuarda el valor tal cual; agrega el paquete dotenv-expand para activar la expansión de ${VAR} y $VAR.
python-dotenvSolo las llaves ${VAR} se expanden; un $VAR suelto se deja tal como lo escribiste. Pasa interpolate=False a load_dotenv() para desactivarlo.
docker compose (.env y archivo compose)Sí, tanto ${VAR} como $VAREscribe $$ para un dólar literal; $$ también evita que Compose interpole lo que le sigue.

Preguntas frecuentes

¿Es seguro pegar un .env con secretos reales?

Sí. La conversión ocurre completamente en tu navegador: no hay subida, ni servidor, ni registro de lo que escribes. Tus variables nunca salen de tu equipo, que es justo lo que quieres para un archivo lleno de claves y contraseñas.

¿Cómo se manejan las comillas y los escapes?

Los valores entre comillas simples se toman de forma literal, y los de comillas dobles expanden los escapes \n, \t y \", igual que los cargadores dotenv más comunes. Un valor entre comillas no puede ocupar varias líneas: escribe los saltos como \n dentro de comillas dobles. Al generar un .env, los valores solo llevan comillas cuando contienen espacios, #, = o saltos de línea.

¿Qué pasa con los objetos anidados del JSON?

Un archivo .env es plano, así que los objetos y arreglos anidados no se pueden escribir tal cual. Por defecto la herramienta te dice qué claves son anidadas; activa "Aplanar claves anidadas con __" para convertir { "db": { "host": … } } en DB__HOST, una convención que muchas librerías de configuración leen automáticamente.

Herramientas relacionadas