Convertir TOML a JSON

Aquí puedes convertir TOML a JSON gratis y sin cuenta: suelta el archivo arriba y en un par de segundos tienes el resultado listo para descargar. La conversión ocurre en tu propio navegador, así que el archivo no se sube nunca. Funciona igual en Windows, macOS y Linux que en iPhone y Android, y sigue funcionando aunque cortes la conexión.

  • Dónde se ejecuta En tu navegador. El archivo no se sube.
  • Sin pérdida No se pierde nada. JSON contiene exactamente lo que contenía TOML.
  • Límite de tamaño Hasta 100 MB por archivo, gratis y sin cuenta.

Hasta 100 archivos a la vez. Mezclar formatos no es problema.

Leer un `pyproject.toml` desde una cadena de herramientas que no entiende TOML

TOML lleva años siendo el estándar del empaquetado de Python y de Rust, y lo que rodea a un repositorio con frecuencia no ha ido al mismo ritmo. Un paso de integración continua que tiene `jq` y poco más, un script de Node que necesita sacar la versión de un `Cargo.toml`, un panel que cuenta dependencias en doscientos repositorios: los tres saben leer JSON y ninguno sabe leer TOML sin añadir una dependencia.

Ese es el caso que atiende esta conversión, y funciona limpiamente porque los dos modelos de datos se solapan casi por completo. Un TOML es una tabla de pares clave-valor con anidamiento y listas, que es un objeto JSON con anidamiento y listas. Lo interesante son los cuatro sitios donde TOML sabe algo que JSON no sabe.

Cabeceras entre corchetes, cabeceras con puntos y listas de tablas

Una cabecera entre corchetes se convierte en un objeto anidado, y una cabecera con puntos anida varios niveles de golpe: una cabecera escrita para una herramienta y otra para un analizador debajo producen un objeto dentro de otro objeto, de modo que la ruta del JSON coincide exactamente con la cabecera. No hay nada que interpretar sobre la estructura.

La cabecera entre corchetes dobles es la lista de tablas y se convierte en una lista JSON de objetos, con una entrada por aparición. Es lo que sostiene los autores de un paquete de Python, los binarios de un crate de Rust y los objetivos de una compilación, y es la construcción que más preocupa a la gente y menos debería. El orden se conserva.

Las cuatro fechas de TOML y cómo se escriben en un formato que no tiene ninguna

TOML es el único formato de esta familia con tipos temporales de verdad: fecha y hora con desfase, fecha y hora local, fecha local y hora local están en la especificación, y el analizador las devuelve como objetos de fecha. JSON no tiene tipo de fecha, así que cada una acaba siendo una cadena.

Lo que aquí está resuelto con cuidado es que la cadena no aplana los cuatro tipos en uno. El analizador devuelve un objeto que recuerda cuál de los cuatro era, y el escritor lo respeta: una fecha sin hora sigue siendo una fecha sin hora y una hora sin fecha sigue siendo una hora sin fecha, en vez de convertirse todo en un instante completo inventando la parte que faltaba. Ese cuidado existe porque la alternativa —usar la representación por defecto del lenguaje— producía un texto dependiente del idioma y del huso del visitante, distinto en tu máquina que en la nuestra.

La hora local gana milésimas que no estaban escritas

Hay una arruga concreta que conviene conocer antes de comparar cadenas aguas abajo. Una hora local escrita en el TOML como las ocho de la mañana llega al JSON con una parte fraccionaria de milisegundos añadida. El valor no cambia; su representación textual sí.

Si lo que hay al otro lado interpreta la cadena como una hora, no pasa nada. Si lo que hay al otro lado la compara carácter a carácter con una constante escrita a mano —cosa mucho más frecuente en scripts de despliegue de lo que a nadie le gusta admitir—, ese sufijo es exactamente lo que va a romper la comparación, y el fallo aparecerá lejos de la conversión.

El TOML perfectamente válido que esta conversión se niega a convertir

TOML 1.0 exige que una implementación maneje enteros con signo de 64 bits. Los números de JSON son de coma flotante de doble precisión y solo son exactos hasta unos nueve mil billones. Un TOML con un entero por encima de ese rango es completamente legal, y aquí el analizador se detiene con un error que dice que el valor entero no puede representarse sin pérdida, en lugar de producir un JSON con un número equivocado dentro.

Negarse es la decisión correcta y merece entenderse en vez de esquivarse a ciegas. Un identificador redondeado en silencio es un fallo que aparece semanas después en un cruce que no encuentra nada. Si tu TOML guarda un valor de ese tamaño —un identificador de los que generan los sistemas distribuidos, un número de serie largo, una marca de tiempo en nanosegundos como entero—, entrecomíllalo como cadena en el origen: nunca fue una cantidad, y entrecomillarlo deja correctos de golpe a todos los consumidores.

Infinito, no-es-un-número y la distinción entre entero y decimal

Los decimales de TOML incluyen `inf` y `nan` como valores literales. JSON no tiene ninguno de los dos, y el escritor pone `null` para ambos. Es lo que hace el serializador del lenguaje y es una pérdida que nadie reporta: un límite superior configurado como infinito y un límite superior sin configurar se vuelven la misma cosa en el JSON.

La pérdida más sutil es la de tipo. TOML distingue un entero de un decimal, de modo que `1` y `1.0` son valores distintos con tipos distintos y un esquema o una aplicación pueden apoyarse en ello. JSON tiene un único tipo numérico, y `1.0` se serializa como `1`. Si algo aguas abajo necesita saber que un valor se declaró como decimal, esa información tiene que viajar por otro camino, porque en el fichero ya no está.

El orden de las claves se respeta salvo en un caso

Las tablas y las claves salen en el orden en que las declaró el TOML, lo cual mantiene el fichero convertido legible y hace que un diff entre dos conversiones signifique algo. Nada en este conducto de datos ordena alfabéticamente ni reorganiza por su cuenta.

La excepción son las claves numéricas. Una clave entrecomillada de TOML que sea un número —cosa que aparece en configuraciones que indexan por año o por puerto— se coloca por delante de todas las demás de su objeto y se ordena de menor a mayor, porque así ordena el lenguaje las claves con aspecto de entero. Es el único punto en el que el JSON no se lee en la misma secuencia que el origen.

Acentos y eñes: qué esperar exactamente en la salida

Un TOML es UTF-8 por especificación, y buena parte de los que se escriben en español llevan texto acentuado en los valores: descripciones de paquete, nombres de autores, mensajes de ayuda. El escritor de este sitio no aplica ningún paso de escape a caracteres no ASCII, así que esos caracteres aparecen tal cual en el JSON en vez de convertirse en secuencias `\u00f1`.

Es lo que quiere casi todo el mundo, porque el fichero se sigue leyendo, y conviene saberlo si algo aguas abajo espera lo contrario. Un consumidor antiguo que asuma ASCII escapado no va a recibirlo, y ahí el arreglo es un paso de reescritura en el consumidor y no un ajuste aquí. Comprueba una descripción con tildes al principio, no al final del despliegue.

Cómo sale escrito el fichero, exactamente

La salida va sangrada con dos espacios y termina en un salto de línea. No hay opción para cambiarlo, ni modo compacto, ni ordenación alternativa: es una sola forma de escribir el JSON, siempre la misma, que es precisamente la propiedad que hace comparable la salida de dos conversiones distintas.

Ese detalle importa más de lo que parece si el JSON acaba pasando por un control de versiones o por una comprobación de igualdad en la integración continua. Una salida estable convierte «el fichero ha cambiado» en una señal fiable; una salida que dependiera de un ajuste convertiría cada actualización en ruido.

Los comentarios son lo que decide quién manda entre los dos ficheros

TOML admite comentarios y los usa mucho: el motivo por el que una dependencia está fijada, el número de incidencia junto a un apaño, el bloque que explica a qué entorno se aplica un ajuste. JSON no tiene sintaxis de comentario, así que nada de eso llega.

Eso resuelve la dirección de la relación entre los dos ficheros. El TOML es el que la gente edita y revisa, y el JSON se genera a partir de él cada vez que algo necesita leerlo. Guardar el JSON en el repositorio junto al TOML crea dos versiones de la verdad que acabarán separándose; generarlo en el paso de compilación, no.

Cuándo instalar un analizador de TOML en vez de convertir

Si la lectura ocurre dentro de una aplicación y no en un paso de compilación, usa un analizador. Todos los lenguajes mayores tienen uno, y Python lleva varias versiones con uno en su biblioteca estándar. Leer el fichero directamente conserva los tipos temporales y la distinción entre entero y decimal que esta conversión aplana.

El conversor se gana su sitio en la frontera: una inspección puntual, un paso de integración continua donde añadir una dependencia cuesta más de lo que vale, o una tubería cuya siguiente etapa solo habla JSON. Todo ocurre en tu navegador y ninguna petición lleva el fichero fuera, así que una configuración privada con credenciales dentro se puede soltar aquí sin que salga de tu equipo. El tope son 100 MB por archivo, que ningún fichero de configuración se acerca a alcanzar.

Cómo convertir TOML a JSON

  1. Suelta tu archivo TOML en esta página, o haz clic para elegir uno.
  2. Elige JSON como destino. La conversión ocurre en tu navegador y el archivo no se sube.
  3. Descarga el archivo JSON terminado.

TOML frente a JSON: qué cambia

TOML frente a JSON
TOMLJSON
Nombre completoTom's Obvious Minimal LanguageJavaScript Object Notation
Extensión de archivo.toml.json
Tipo de medioapplication/tomlapplication/json
Publicado por primera vez20132001
EspecificaciónTOML 1.0RFC 8259
LicenciaEstándar abiertoEstándar abierto
Situación actualVigenteVigente
Se abre en el navegadorNingún navegadorTodos los navegadores
Considerado en su lugarYAML, INIXML, YAML, NDJSON

Qué se pierde

Los comentarios no sobreviven. TOML permite anotar un archivo y JSON no tiene sintaxis para ello, así que cada línea explicativa se pierde — y afecta justo a los archivos que se comentan: configuración que otra persona tendrá que mantener.

Qué se conserva

No se descarta nada. TOML y JSON guardan su contenido sin pérdida, así que la conversión cambia el envoltorio y no la calidad, y puede repetirse sin que el daño se acumule.

Abrir el resultado

JSON se abre en cualquier navegador actual. TOML llega a menos navegadores todavía. Si el archivo va a una página web o a un formulario, ese suele ser todo el motivo de la conversión.

Visual Studio Code lee tanto TOML como JSON, así que puedes comparar el resultado con el original sin un segundo programa.

Para qué sirve cada formato

Los dos apuntan a trabajos distintos: TOML a la edición y JSON a mover datos entre programas y la web. Conviene sopesarlo antes, porque la razón de ser de uno suele ser la razón por la que el otro resulta incómodo.

TOML se publicó en 2013. Está recogido en TOML 1.0, y conviene conocerlo si el archivo tiene que sobrevivir a la herramienta que lo escribió.

JSON es de 2001, recogido en RFC 8259. Visual Studio Code, jq y Postman lo leen.

De TOML a JSON: preguntas frecuentes

¿Se sube a algún sitio mi archivo TOML?

No. Esta conversión ocurre por completo en tu navegador, así que el archivo no sale de tu dispositivo. Puedes comprobarlo tú: abre la pestaña de red de las herramientas de desarrollo y convierte algo. Verás la propia página y las peticiones de estadística y publicidad con las que se paga este servicio, y ni una sola que lleve tu archivo.

¿Convertir TOML a JSON es gratis?

Sí. Sin cuenta, sin marca de agua y sin cupo diario que se gaste: se ejecuta en tu propio equipo, así que puedes volver tantas veces como quieras. El navegador procesa archivos de hasta 100 MB, 100 a la vez.

¿Se pierde calidad al convertir TOML a JSON?

No. JSON guarda el mismo contenido sin tirar nada: el resultado es idéntico en calidad al original.

¿Es sin pérdida la conversión de TOML a JSON?

No se descarta nada. TOML y JSON guardan su contenido sin pérdida, así que la conversión cambia el envoltorio y no la calidad, y puede repetirse sin que el daño se acumule.

¿Sobreviven los comentarios de TOML a JSON?

Los comentarios no sobreviven. TOML permite anotar un archivo y JSON no tiene sintaxis para ello, así que cada línea explicativa se pierde — y afecta justo a los archivos que se comentan: configuración que otra persona tendrá que mantener.

Más sobre estos formatos