Conversor de YAML a JSON

Convierte YAML a JSON (o JSON de vuelta a YAML) en tu navegador, soporta manifiestos multi-documento, anclas, y errores claros con número de línea.

🌐 English

🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.

La conversión es en realidad una pregunta sobre las reglas de tipos de YAML

El JSON es un subconjunto de YAML, lo que hace que una de las dos direcciones suene trivial y esconde dónde está el trabajo de verdad. Los dos formatos describen las mismas seis clases de valor, así que no se pierde nada estructural al ir de YAML a JSON. Lo que cambia es cómo decide cada formato qué significa un escalar sin comillas, y YAML tiene muchas más opiniones al respecto que JSON.

El null es el ejemplo fácil. El JSON lo escribe de una única manera. YAML acepta null, Null, NULL, ~ y un valor vacío después de los dos puntos, y las cinco formas llegan a JSON como el mismo null. Los números también van más sueltos: YAML lee 0x1F como 31 y 1e3 como un float, mientras que el JSON no tiene literales hexadecimales en absoluto. Las marcas de tiempo son las que sorprenden, porque un 2024-01-15 a secas es un tipo YAML de verdad, se convierte en un objeto de fecha real durante el análisis, y después se serializa en JSON como la cadena ISO completa 2024-01-15T00:00:00.000Z, porque el JSON no tiene dónde meter una fecha.

Por eso “convertir mi YAML” no es una sustitución de texto. Ver cuáles de tus valores consideró número el analizador, cuáles cadena y cuáles booleano suele ser el motivo entero para pasar un manifiesto por aquí.

La trampa del yes y el no, y de qué lado está esta herramienta

Hay un patrón de error muy conocido según el cual un archivo de configuración con códigos de país convierte NO en false, porque YAML 1.1 trataba yes, no, on y off como formas de escribir booleanos. Picó a suficientes proyectos como para ganarse un apodo, el problema de Noruega.

Este conversor ejecuta js-yaml v4 con su esquema por defecto, que resuelve los booleanos a la manera de YAML 1.2, así que los únicos booleanos son true y false. Ese esquema por defecto son los tipos básicos de 1.2 más un puñado de extras que js-yaml conserva, y por eso funcionan las marcas de tiempo y las claves de fusión de más abajo. Tu no sale como la cadena "no". Lo comprobamos contra la biblioteca en lugar de fiarnos de la fama de YAML en general, porque cambia el consejo: si estás depurando una configuración que malinterpretó una cadena de herramientas de Ruby, Perl o de un Python antiguo, el resultado de aquí va a discrepar con la herramienta que se rompió, y esa discrepancia es el hallazgo.

Esto tiene un matiz que le importa especialmente a quien escribe configuraciones en español. La lista de booleanos de YAML 1.1 es de palabras inglesas, así que el trato era asimétrico: un archivo que usara si y no como valores veía su no convertido en false mientras que su si se quedaba como cadena, porque si no estaba en esa lista y no sí. Bajo el esquema 1.2 que usa esta herramienta los dos se quedan como cadenas, que es el comportamiento coherente. Si de todas formas querías booleanos, escríbelos como true y false.

Archivos con varios documentos y la decisión de usar loadAll

Las convenciones de Kubernetes meten varios recursos en un mismo archivo, separados por una línea ---. Casi todos los conversores ingenuos leen el primer documento y o bien se detienen o bien fallan, porque el load normal de js-yaml rechaza de plano un flujo que contenga más de un documento.

Esta herramienta llama a loadAll en su lugar, y después toma una decisión de criterio sobre la forma de la salida. Un archivo de un solo documento te devuelve el objeto o el array en sí, no un array de un elemento envolviéndolo, porque es lo que espera quien pega una configuración corriente. Dos o más documentos devuelven un array JSON con un elemento por documento, en el orden del origen. Así que un archivo que agrupe un Deployment, un Service y un ConfigMap se convierte en un array de tres objetos que puedes indexar. Una entrada genuinamente vacía, incluido un documento vacío entre dos separadores, se convierte en null, que es lo que dice la especificación de YAML que contiene un documento vacío.

Lo que no sobrevive al viaje

Los comentarios son la gran pérdida y ninguna herramienta puede evitarlo. Un comentario con # no forma parte del modelo de datos de YAML, así que el analizador lo descarta al leer; no queda ningún comentario para cuando se escribe la salida, y el JSON tampoco tiene sintaxis para recibirlo. Cualquier configuración donde los comentarios lleven el conocimiento acumulado debería editarse en su sitio, no pasarse de ida y vuelta.

Otras dos cosas menores también se aplanan. Los anclajes y los alias se resuelven a sus valores, así que un bloque &defaults referenciado tres veces, o incorporado con una clave de fusión, aparece tres veces entero en el JSON en lugar de seguir siendo una referencia. Y las claves de mapeo que parecen enteros se reordenan: los objetos de JavaScript enumeran las claves con aspecto de entero en orden numérico ascendente sin importar el orden en que se escribieron, así que un mapeo con las claves 10 y 2 va a salir con el 2 primero. Entrecomilla esas claves en el origen si su orden importa.

En la dirección contraria

Cambia Dirección a JSON → YAML y la misma caja acepta JSON. La opción de sangrado (de 1 a 8 espacios, 2 por defecto) hace un trabajo útil en los dos modos: fija la sangría de la salida JSON en una dirección y la sangría de bloque de js-yaml en la otra. Los valores fuera de ese rango se acotan en lugar de rechazarse. En cualquiera de los dos casos son cuatro pasos:

  1. Pega tu YAML (o tu JSON) en la caja de texto de arriba.
  2. Deja Dirección en YAML → JSON, o cámbiala a JSON → YAML.
  3. Ajusta el tamaño de sangrado si el valor por defecto de 2 no es tu estilo de casa.
  4. Pulsa el botón y después Copiar al portapapeles. Un fallo de análisis aparece en la misma caja de salida, nombrando la línea y la columna, y no como un cartel de error genérico.

Esta es la dirección a usar cuando una herramienta exige YAML y lo que tienes es la respuesta de una API o una configuración exportada. Eso sí, no esperes que el resultado parezca escrito a mano. Un serializador toma decisiones consistentes sobre entrecomillado y estilo de flujo que no tomaría una persona, así que el YAML es correcto pero soso.

Leer un error de análisis

Las dos direcciones informan de los fallos como una única línea que nombra la posición y el motivo del propio analizador, en lugar de un cartel genérico de entrada no válida. El lado de YAML convierte la marca de base cero de js-yaml en la línea y la columna de base uno que muestra tu editor; el lado de JSON reutiliza la descripción de error ya escrita y probada para el formateador de JSON en vez de duplicar esa lógica.

Merece la pena dejar constancia de un detalle de la construcción. La función de conversión no lanza nunca una excepción, y es deliberado. El shell compartido de herramientas de texto captura cualquier error lanzado y sustituye su mensaje por un cartel fijo de que algo ha ido mal, lo que se habría tragado justamente lo único que esta herramienta existe para enseñarte. Así que el texto del error se devuelve como resultado y aterriza en la caja de salida, donde se puede leer.

Si tu entrada resulta ser XML en vez de YAML, el conversor de XML a JSON cubre esa forma, y el comparador de textos es el paso siguiente habitual una vez tienes dos configuraciones en el mismo formato y quieres ver qué cambia de verdad.

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Conversor de YAML a JSON con la entrada de ejemplo «site: sysfenix uploads: 0 categories: - image - …», Direction en YAML → JSON, Indent size (spaces) en 2
Conversor de YAML a JSON en pleno proceso: la entrada de ejemplo «site: sysfenix uploads: 0 categories: - image - …», Direction en YAML → JSON, Indent size (spaces) en 2.
Captura de pantalla del resultado de Conversor de YAML a JSON mostrando la salida generada «{ "site": "sysfenix", "uploads": 0, "categories"…»
El resultado final: la salida generada «{ "site": "sysfenix", "uploads": 0, "categories"…». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿Se envía mi YAML o JSON a un servidor para convertirlo?

No. Esta herramienta ejecuta la biblioteca js-yaml y el propio JSON.parse/JSON.stringify de JavaScript enteramente dentro de tu pestaña del navegador, no ocurre ninguna petición de red al hacer clic en Convertir. Esto importa porque los archivos YAML (manifiestos de Kubernetes, configuraciones de CI, archivos docker-compose) muy a menudo contienen nombres de host internos, registros de imágenes, o referencias a secretos que no querrías pegar en un servidor cualquiera.

¿Soporta YAML multi-documento (archivos con separadores ---)?

Sí. Un único archivo de manifiesto de Kubernetes agrupa frecuentemente varios recursos separados por "---" (un Deployment, un Service, un ConfigMap, todo en un archivo), esta herramienta analiza cada documento del archivo, no solo el primero. Un archivo con exactamente un documento se convierte en un único objeto/array JSON, tal como esperarías de un archivo YAML plano; un archivo con dos o más documentos se convierte en un array JSON donde cada elemento es un documento, en orden.

¿Qué ocurre si mi YAML tiene un error de sintaxis?

Obtienes un mensaje específico con la línea y columna exactas del problema (por ejemplo "YAML inválido en la línea 4, columna 3) mala indentación de una entrada de mapeo", en lugar de un genérico "el análisis falló". Se calcula a partir de los propios datos de ubicación del fallo de análisis de js-yaml, así que señala el carácter real donde el analizador se rindió.

¿Yes/no/on/off se convierten en true/false como hacen algunas herramientas YAML?

No, esto se verificó deliberadamente en lugar de asumirse. La biblioteca subyacente de esta herramienta (js-yaml v4) sigue el Esquema Central de YAML 1.2 moderno, donde solo las palabras literales "true" y "false" (en cualquier mayúscula/minúscula) son booleanos; "yes", "no", "on" y "off" se convierten como cadenas planas, no como booleanos. Algunas herramientas más antiguas y la especificación original YAML 1.1 también trataban esas palabras como booleanos (una fuente frecuente del célebre "problema de Noruega", donde un código de país "NO" se convertía en silencio en false), esta herramienta evita esa trampa igualando el comportamiento real y actual de js-yaml.

¿Qué pasa con las anclas, alias y fechas de YAML?

Las anclas y alias (&nombre / *nombre), incluidas las claves de fusión (<<:), se resuelven a sus valores reales en la salida JSON, verificado directamente en lugar de asumido. Un escalar de fecha YAML (por ejemplo 2024-01-15) se analiza como una fecha real y aparece en el JSON como una cadena ISO 8601 estándar (2024-01-15T00:00:00.000Z), ya que JSON no tiene ningún tipo de fecha nativo.

¿Puedo convertir JSON de vuelta a YAML también?

Sí, cambia la opción "Dirección" a "JSON → YAML". Pega JSON válido y se analiza y reserializa como YAML usando el mismo ajuste de tamaño de sangría. Un JSON inválido obtiene un mensaje de error específico de línea/columna de la misma forma que un YAML inválido.

¿Esto es seguro frente a un archivo YAML malicioso que intente ejecutar código?

Sí. Los analizadores YAML más antiguos (incluidas versiones más antiguas de js-yaml) soportaban modos de carga "inseguros" que podían construir objetos JavaScript arbitrarios o incluso funciones a partir de etiquetas personalizadas en un archivo YAML. Esta herramienta usa exclusivamente el cargador seguro de js-yaml v4 (yaml.load/yaml.loadAll sin esquema personalizado), que se verificó directamente que rechaza esas etiquetas personalizadas por completo (un error de "etiqueta desconocida") en lugar de ejecutar nada, no hay ninguna vía de ejecución de código desde YAML pegado.

Herramientas relacionadas