📝 Conversor TOML ⇔ JSON / YAML
Convierte TOML ⇔ JSON y TOML ⇔ YAML. Ideal para Hugo config.toml, Cargo.toml y pyproject.toml.
🔒 Sobre la privacidad
- ・Todo el procesamiento ocurre en tu navegador
- ・Tus datos nunca se envían a ningún servidor
Copiado
📖 Dónde se suele tropezar
Convierte TOML a JSON o YAML y de vuelta, lo que viene bien para leer archivos de configuración como Cargo.toml, pyproject.toml o un config.toml de Hugo. Todo se ejecuta en el navegador. TOML se diseñó para archivos de configuración que las personas escriben y leen a mano, no como formato de intercambio, lo que deja entre él y JSON o YAML unas cuantas diferencias que no se pueden salvar.
| Caso | Qué ocurre | Qué hacer |
|---|---|---|
| Hay valores JSON que no pueden convertirse a TOML | TOML no tiene null. Es una decisión de la especificación, no un límite de implementación, y se apoya en la idea de que en un archivo de configuración, la ausencia de valor debe expresarse no escribiendo la clave. Así que {"timeout": null} no tiene representación en TOML. Por motivos afines, los arrays de tipo mixto como [1, "two", true] los rechazan muchas implementaciones: TOML 1.0 los permite, pero el soporte de los analizadores es desigual. Intentar convertir una respuesta de API directamente a TOML tropieza primero con estas dos cosas. |
Elimina las claves null antes de convertir: es la respuesta coherente con la filosofía de TOML. Si quieres declarar la ausencia de forma explícita, pon un valor por defecto que signifique algo para esa clave, como una cadena vacía o false. Mejor aún, no uses TOML para intercambio: sirve para otra cosa. TOML encaja con configuración que las personas editan a mano y revisan como diff, mientras que los datos generados y leídos por máquinas pertenecen a JSON. Si una estructura resulta incómoda de expresar en TOML, puede ser señal de que es demasiado compleja para ser configuración: pasados tres niveles de anidamiento, merece la pena repensar el diseño. |
| La salida no se parece al original escrito a mano | TOML puede expresar los mismos datos de tres maneras: una cabecera de tabla [server], un array de tablas [[bin]] y una tabla en línea { host = "x", port = 80 }. Un conversor elige una, así que la salida puede no parecerse en nada a lo que escribiste a mano aunque la estructura sea idéntica. La fuente habitual de confusión es que las cabeceras de tabla funcionan por posición: toda clave posterior a [server] pertenece a server. El orden de las líneas significa algo, de modo que mover una clave una línea cambia a qué tabla pertenece. |
Todas esas salidas son TOML válido: si quieres que se parezca al estilo escrito a mano, toma la conversión como punto de partida y arréglala tú. Y no hagas pasar un archivo de configuración existente por un viaje de ida y vuelta con esta herramienta, por una razón decisiva: los comentarios se pierden por completo. JSON no tiene noción de comentario, así que reformatear Cargo.toml o pyproject.toml pasando por JSON tira la información más valiosa del archivo, como por qué una dependencia está fijada. Usa esta herramienta para leer un archivo y haz los cambios directamente en el original. |
| Las fechas se vuelven cadenas, o las cadenas fechas | TOML tiene fecha y hora como tipos de primera clase: created = 1979-05-27T07:32:00Z se escribe sin comillas y es un valor de fecha y hora, no una cadena. JSON carece de ese tipo, así que la conversión lo pasa a una cadena ISO 8601, traducción bastante natural. El problema es el sentido inverso: convertir el JSON "2024-01-01" de vuelta a TOML puede, según la implementación, quitar las comillas y producir un valor de fecha, cambiando el significado. Si manejas fechas de versión o identificadores que sólo parecen fechas, como una versión llamada "2024-01-01", el mero viaje de ida y vuelta cambia el tipo. |
No hagas viajes de ida y vuelta con valores que parecen fechas. Cuando no te quede otra, lee el TOML convertido y comprueba que las comillas están del lado que querías: created = 2024-01-01 es una fecha y created = "2024-01-01" es una cadena, y ese par de comillas decide el tipo. Para evitar la cuestión en el diseño, añade un prefijo a los valores que no deban ser fechas, como "v2024-01-01". TOML tiene tres tipos temporales —fecha local, hora local y fecha y hora con desfase— y significan cosas distintas; escribe siempre el desfase en los valores que necesiten zona horaria. |
Los archivos de configuración llevan convenciones, no sólo estructura. Las claves de pyproject.toml las fijan los PEP 518 y 621, y cambiar la forma de [project] o [build-system] hace que pip install -e . falle. Con Cargo.toml ocurre lo mismo: [[bin]] tiene que ser un array de tablas, y escribir [bin] significa otra cosa. Por eso el uso propio de esta herramienta es leer y entender un archivo de configuración escrito por otra persona, no servir de vía para reformatearlo o reescribirlo. Segundo, TOML no tiene anclas ni referencias como YAML. Hay que repetir un valor en varios sitios, lo que puede parecer redundante, pero es consecuencia de una decisión de diseño: un archivo de configuración debe entenderse leyéndolo de arriba abajo. Si quieres factorizar algo, no intentes resolverlo dentro del TOML: resuélvelo en lo que genera el archivo.
📖 Cómo usar
-
1
Pegar TOMLPega TOML a la izquierda o elige un ejemplo.
-
2
Elige el formato destinoElige JSON o YAML. Para JSON, ajusta sangría.
-
3
Convierte en ambas direccionesResultado a la derecha. Dirección inversa también en vivo.
❓ Preguntas frecuentes
¿Qué es TOML?
¿Cómo se manejan fechas y horas?
¿Conversión inversa a TOML?
🔗 Herramientas relacionadas
🐛 ¿Encontró un problema con esta herramienta?
Gratis, sin registro. Incluso solo los pasos para reproducir ayudan. Los informes van directamente al operador y se usan para corregir.
¡Gracias por tu reporte!
Tu reporte llegó al operador y se usará para mejorar.