TOML a JSON
No se sube nada: este convertidor analiza TOML 1.0 en tu navegador y emite JSON. Las tablas se convierten en objetos, las entradas [[array of tables]] se convierten en arrays de objetos, las fechas/horas RFC 3339 se mantienen como cadenas y las claves duplicadas fallan con un error numerado de línea en lugar de fusionarse silenciosamente. El JSON sigue RFC 8259.
TOML a JSON: explicación
TOML ocupa un nicho específico: es el formato de Cargo.toml, pyproject.toml y cien gestores de paquetes, elegido porque una persona puede editarlo sin romperlo. JSON ocupa otro diferente — es lo que los programas intercambian. antes o después, un script, un fixture de prueba o una API quiere tu TOML como JSON, y ese cruce tiene exactamente dos preguntas mecánicas: ¿cómo un encabezado [table] se convierte en un objeto JSON, y cómo un encabezado [[array of tables]] se convierte en un array JSON?
El mapeo es determinista. Un [table] y sus claves se convierten en un objeto anidado; las claves con puntos como database.port también se convierten en objetos anidados; un [[array of tables]] se convierte en un array con un objeto por encabezado. Los escalares de TOML se mapean directamente — los booleanos siguen siendo booleanos, los enteros y flotantes siguen siendo números, y los guiones bajos que TOML permite para legibilidad desaparecen, porque 1_000_000 y 1000000 son el mismo número. Las fechas/horas RFC 3339 no tienen tipo en JSON, así que llegan como cadenas con su texto preservado exactamente.
Todo se ejecuta en esta pestaña del navegador. El texto TOML que pegas es analizado por un motor en la página, el JSON se serializa desde el documento analizado, y ninguno toca una red — abre DevTools y observa cómo el panel de Red se queda en silencio mientras conviertes. La Content-Security-Policy de la página prohíbe las conexiones salientes, así que la afirmación sobre privacidad es verificable en lugar de decorativa.
El ciclo de ida y vuelta es el flujo de trabajo habitual — extraer config de un payload, editarlo, devolverlo — y la convertir JSON de vuelta a TOML página ejecuta este mapeo a la inversa, escalares primero.
El JSON que esta herramienta emite es compacto por defecto, así que si lo quieres indentado para lectura, el formateador de JSON lo volverá a imprimir con el espaciado que elijas.
Cómo funciona realmente la conversión
El motor primero analiza tu TOML en un árbol de documentos, porque cada decisión de JSON sigue de las reglas de alcance propias de TOML: un encabezado [table] abre un objeto con nombre, un encabezado [[array of tables]] añade un nuevo objeto a un array con nombre, y las claves por encima de cualquier encabezado pertenecen al objeto raíz. Una vez que el árbol existe, emitir JSON es una serialización directa — las únicas decisiones son los lugares donde TOML y JSON discrepan, y cada uno se decide siempre de la misma manera:
- Tablas: [owner] con una clave name produce un objeto owner — los encabezados de TOML y las llaves de JSON codifican la misma anidación.
- Arrays de tablas: cada encabezado [[servers]] añade un objeto al array servers, en orden de archivo.
- Claves con puntos: database.port = 5432 se anida bajo database, exactamente como TOML 1.0 define que deben comportarse las claves con puntos.
- Fechas/horas: 1979-05-27T07:32:00Z no tiene tipo en JSON, así que se emite como la cadena "1979-05-27T07:32:00Z", byte por byte.
- Números: los guiones bajos son puntuación de TOML, no datos — 1_000_000 se emite como 1000000 — y los inf y nan de TOML se convierten en null, porque JSON no tiene literales para ninguno de los dos.
Cómo se ve la salida
El ejemplo de abajo es el par exacto que produce el botón Cargar muestra del convertidor: una raíz con tres claves escalares (una de ellas con guion bajo), una tabla [issuer], y dos entradas [[items]]. Observa cómo cada forma cruza — los guiones bajos desaparecen dentro del número, la tabla issuer se anida como objeto, y el array items recolecta sus objetos en orden de archivo. Las claves mantienen el orden en que TOML las declaró, porque el orden del documento es el único orden que un convertidor puede mantener honestamente.
Como el JSON se emite desde el árbol analizado en lugar por empalme textual, el formato también se normaliza: dos estilos de espaciado en el TOML producen un JSON consistente, y una línea en blanco extra no cambia nada. Lo que sobrevive es estructura y valores — que es exactamente lo que debe prometer un convertidor.
Claves duplicadas y otros fallos honestos
Un convertidor honesto rechaza entradas que no puede representar fielmente, y TOML 1.0 es lo suficientemente estricto como para que esos rechazos sean raros y unívocos. Tres entradas son rechazadas con un mensaje específico numerado de línea en lugar de ser reconfiguradas silenciosamente:
- Claves duplicadas — TOML 1.0 prohíbe definir una clave más de una vez, así que el analizador se detiene en la línea ofensora en lugar de permitir que el último-gana reescriba silenciosamente tu configuración.
- Cadenas multilínea — el subconjunto admitido por este analizador cubre cadenas básicas y literales de una sola línea; un bloque """ es rechazado con un mensaje que dice exactamente eso, en lugar de una suposición distorsionada.
- Constructos no cerrados — un encabezado [table] o cadena entrecomillada que nunca termina informa la línea donde el analizador se rindió, no un error de sintaxis genérico.
El mapeo a vistazo
Cada constructo que este convertidor admite, y a dónde llega en el JSON:
| TOML 1.0 | JSON de salida |
|---|---|
| tabla [owner] | Objeto anidado "owner" |
| encabezado [[items]] | Array "items" de objetos |
| clave con puntos database.port | Objeto anidado "database" |
| 1979-05-27T07:32:00Z | Cadena, texto RFC 3339 preservado |
| 1_000_000 | Número 1000000 |
| 'cadena literal' | Cadena, barras invertidas intactas |
Preguntas frecuentes
¿Convertir TOML a JSON sube mi archivo a algún sitio?
No. El análisis y la serialización se ejecutan dentro de esta pestaña del navegador con JavaScript que se cargó cuando abriste la página. No hay ruta API a la que enviar datos, y la Content-Security-Policy bloquea conexiones salientes. Puedes verificar ambas afirmaciones en segundos: abre DevTools, observa el panel de Red mientras conviertes, y verás que no se dispara ninguna petición.
¿Qué pasa con las fechas/horas TOML en la salida JSON?
Se convierten en cadenas. JSON (RFC 8259) no tiene tipo de fecha o fecha/hora — solo cadena, número, booleano, null, objeto y array — así que 1979-05-27T07:32:00Z se emite como la cadena exacta "1979-05-27T07:32:00Z". Nada se reformatea ni cambia de zona horaria; el texto sobrevive byte por byte, y tu código downstream lo analiza cuando necesita una fecha real.
¿Cómo difiere [[array of tables]] de [table]?
Los corchetes dobles añaden, los corchetes simples definen. [servers] crea un objeto llamado servers; un segundo encabezado [servers] sería un error de clave duplicada. [[servers]] crea un array y añade un objeto por encabezado, así que tres bloques [[servers]] se convierten en un array de tres elementos. La distinción simple-doble es toda la diferencia, por lo que este convertidor también la preserva en la dirección inversa.
¿Por qué una clave duplicada es un error en lugar de una sobrescritura?
Porque TOML 1.0 declara que definir una clave múltiples veces es inválido, y un convertidor que resolviera el conflicto certificaría un archivo que su propia especificación rechaza. El error cita el número de línea de la segunda definición, que suele ser el error tipográfico o la mala fusión que necesitabas encontrar de todos modos.
Mi TOML usa cadenas multilínea entrecomilladas con triples — ¿por qué el error?
Este analizador soporta un subconjunto documentado de TOML 1.0: cadenas básicas y literales de una sola línea, enteros, flotantes, booleanos, fechas/horas, tablas, arrays de tablas y claves con puntos. Las cadenas multilínea están fuera del subconjunto y son rechazadas con un mensaje claro con nombre en lugar de ser analizadas parcialmente. Divide el valor en una cadena de una sola línea con escapes \n y se convertirá limpiamente.
¿Qué pasó con mis valores inf y nan?
TOML permite inf y nan de punto flotante, pero JSON no tiene literales para ninguno — JSON.parse no puede producirlos y JSON.stringify escribe null. El convertidor emite null para esos dos valores y los marca en la vista previa, porque convertir silenciosamente el infinito en un número finito-looking es el tipo de mentira que cuesta horas de seguimiento.
¿Qué herramientas relacionadas debería usar después?
- JSON a TOMLConvertidor que funciona en tu navegadorAbrir
- Formatear JSONIndenta, ordena claves y quita comentariosAbrir
- Validar JSONValida la sintaxis con línea y columna exactas y repara los erroresAbrir
- Qué es JSONGuía en lenguaje sencilloAbrir
- JSON vs YAMLComparativa directaAbrir
- Herramientas JSONCompara, formatea, valida y explora documentos JSON.Abrir