Conversor TOML ↔ JSON
FormatoTodo se ejecuta en tu navegador: no se sube nada
Convierte un archivo TOML (Cargo.toml, pyproject.toml, cualquier configuración `*.toml`) a JSON, o al revés. Usa una implementación completa de TOML 1.0, así que los cuatro tipos de fecha y hora, las cadenas de varias líneas, las claves con puntos, los arrays de tablas (`[[x]]`) y los números hexadecimales o con guiones bajos se manejan bien: un subconjunto casero de «key = value y unas secciones» acabará leyendo alguna entrada como otra cosa sin avisar. Se tratan los tres puntos que alteran tus datos en silencio: · Las fechas y horas locales no se convierten de zona horaria. El `1979-05-27` de TOML es *ese día*, no «ese día a las 00:00 UTC»; `07:32:00` tampoco tiene zona. Tratarlos como instantes desplaza la fecha un día entero al este de UTC. · Los enteros grandes conservan todos los dígitos. Lo que pasa de 2^53 sale como cadena (`9223372036854775807` se vuelve `...5808` como Number): cambia el tipo, ni un carácter del valor. · `inf` / `-inf` / `nan` no se vuelven null. JSON no tiene esos valores y `JSON.stringify(Infinity)` devuelve `null`, sin error: `inf = inf` se convierte en `{"inf": null}` sin decir nada. Aquí pasan a cadenas, así que el valor se sigue viendo. En la otra dirección hay un problema inevitable: TOML no tiene tipo null, y el comportamiento predeterminado es descartar la clave entera. Así que aquí se da un error por defecto que nombra la clave, y las opciones permiten escribir una cadena vacía u omitirla.
Funciones
- Las dos direcciones, detectadas automáticamente o fijadas a mano
- Los cuatro tipos de fecha y hora siguen la norma: las fechas y horas locales no llevan conversión de zona horaria (que desplazaría la fecha un día)
- Los arrays de tablas `[[x]]` y los arrays de objetos se convierten en ambos sentidos; las claves con puntos se expanden a objetos anidados y las que necesitan comillas las reciben
- Los enteros grandes van por BigInt: lo que pasa de 2^53 sale como cadena, dígito a dígito
- inf / -inf / nan pasan a cadenas en vez de volverse null en silencio, como hace JSON.stringify
- En JSON → TOML, un null da error con su ruta (TOML no tiene tipo null y el comportamiento predeterminado descarta la clave)
- Los null pueden en cambio volverse una cadena vacía u omitirse; un null dentro de un array no se puede omitir (desplazaría todos los índices siguientes)
- Los errores de análisis señalan una línea y una columna en vez de decir «formato incorrecto»
- Si el nivel superior no es un objeto, se explica que «un documento TOML siempre es una tabla» en vez de soltar un error de la librería
- Salida con resaltado; el sangrado del JSON admite 2 o 4 espacios, o tabulador
Cómo se usa
- Pega TOML o JSON: lo que se pueda analizar como JSON se trata como JSON y el resto como TOML
- El resultado se actualiza mientras escribes; la dirección también se puede fijar a mano
- Si JSON → TOML avisa de un null, elige cómo tratarlo y continúa
- Copia el resultado
Preguntas frecuentes
- ¿Por qué da error con un null de mi JSON?
- Porque TOML no tiene ningún tipo null. Convertirlo tiene tres desenlaces y ninguno es sin pérdida: la clave desaparece entera (el comportamiento predeterminado de la librería y el más peligroso: recibes una configuración a la que le falta un campo en silencio), el valor pasa a cadena vacía (la clave sobrevive, el tipo cambia de null a cadena), o la clave se omite. Aquí se da error por defecto y se nombra la clave, porque las otras dos te dejan una configuración que parece correcta y no lo es, sin nada que te avise. Cuando sepas qué clave es, elige una opción para continuar.
- ¿Por qué los enteros grandes se volvieron cadenas? ¿Y inf / nan?
- Porque JSON no puede expresarlos. Los enteros por encima de 2^53 no tienen representación exacta en JavaScript: `9223372036854775807` se convierte en `...5808` y los dígitos finales se pierden en silencio. Y `inf` / `-inf` / `nan` no tienen representación alguna: `JSON.stringify(Infinity)` produce null, sin error. Antes que emitir un valor que parece correcto y no lo es, pasan a cadenas: cambia el tipo, no el valor, y ves el cambio en la salida.
- ¿Por qué las fechas locales no llevan zona horaria?
- Porque en TOML no la tienen. `birthday = 1979-05-27` significa *ese día*, y `alarm = 07:32:00` significa *esa hora del día*; ninguno apunta a un instante. Si la conversión lo tratara como «1979-05-27 00:00 UTC» y luego lo mostrara en tu zona, quien esté al este de UTC vería el 26 de mayo: la fecha desplazada un día. Por eso la salida conserva `1979-05-27` exactamente, sin `Z`. Las dos formas con desfase (`1979-05-27T07:32:00Z` y `...-07:00`) conservan su desfase.
- ¿Dónde se fueron los comentarios?
- JSON no tiene ninguna estructura que pueda llevar un comentario: solo objetos, arrays y escalares. Convertir a JSON solo puede descartarlos, y la dirección inversa no tiene ninguno que conservar de entrada. Si los comentarios importan, guarda el TOML original en lugar de tratarlo como un paso intermedio.
Herramientas relacionadas
Conversor YAML
FormatoConvierte YAML a JSON y al revés: varios documentos, anclas y claves de fusión, enteros grandes exactos y errores de análisis con línea y columna.
Conversor CSV
FormatoConvierte CSV / TSV y JSON en ambos sentidos: detecta el delimitador, cita bien los campos, quita el BOM de Excel y solo numera lo que no pierde datos.
Formateador JSON
FormatoFormatea, valida y repara JSON en línea: árbol plegable, búsqueda de claves y valores, edición nodo a nodo y errores con línea y columna.
JSON a código
FormatoConvierte una muestra JSON en interfaces de TypeScript, structs de Go, clases de Java o structs de Rust; las claves que faltan salen opcionales.
Formateador SQL
FormatoFormatea SQL en línea: una cláusula por línea, palabras clave con el mismo estilo y subconsultas sangradas. El minificador quita los comentarios.
Conversor JSON5
FormatoPasa JSON5 a JSON estricto: comentarios, claves sin comillas, comillas simples, comas finales, hexadecimal e Infinity, con errores por línea y columna.