¿Qué es la conversión JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) es un formato de texto estricto delimitado por llaves para datos estructurados; YAML (YAML Ain't Markup Language, versión 1.2) es un superconjunto de JSON que utiliza sangría, saltos de línea y sintaxis legible para el mismo modelo de valores. Convertir entre ambos te permite pivotar la misma configuración entre una forma amigable para máquinas (JSON para APIs, validación de esquemas, transformaciones programáticas) y una forma amigable para humanos (YAML para revisiones de código, manifiestos de Kubernetes, flujos de GitHub Actions) sin reescribir una sola clave.
¿Cómo funciona la conversión JSON ↔ YAML?
Cada conversión se ejecuta localmente en tu navegador usando la librería js-yaml incluida (MIT, versión 4.1.0). Los pasos principales son:
- El selector de modo (Detección automática / JSON → YAML / YAML → JSON) decide qué pipeline se ejecuta. En modo Detección automática, el primer carácter no en blanco de la entrada elige la dirección —
{o[significa JSON; cualquier otra cosa significa YAML. - JSON → YAML:
JSON.parsevalida la entrada y produce un valor JavaScript;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })escribe la forma YAML 1.2. Con Multi-documento activado, un array de entrada se vuelca un elemento por documento y se une con separadores---. - YAML → JSON:
jsyaml.loadAllanaliza todos los documentos de la entrada (gestionando los separadores---automáticamente) y los pone en un array; las entradas de un solo documento se desempaquetan para que la salida JSON sea el documento en sí, no un array de un elemento. - Sangría (2 o 4 espacios) e Imprimir bonito son configurables. Con Imprimir bonito desactivado se emite JSON minificado mediante
JSON.stringify(value)sin espacios en blanco. - La salida se escribe en el área de texto de solo lectura. En fallos de análisis YAML, el mensaje de error incluye la línea y columna (1-indexadas) reportadas por
e.markdejs-yamlpara que puedas saltar directamente al bug.
¿Por qué convertir JSON y YAML con esta herramienta?
- Privacidad: cada pasada de análisis, transformación y emisión ocurre en tu navegador. Los datos — incluidos secretos de Kubernetes, JWT firmados y configuraciones propietarias — nunca llegan a nuestros servidores.
- YAML multi-documento:
jsyaml.loadAllreconoce los separadores---y devuelve un array de documentos, que el convertidor desempaqueta para casos de un solo documento o conserva como array JSON para casos multi-documento. - Anchors y aliases resueltos: el mecanismo
&anchor/*aliasde YAML lo maneja el esquema por defecto dejs-yaml. Un valor definido una vez y referenciado dos veces se mantiene en la ida y vuelta a un objeto JSON donde todas las referencias guardan valores iguales. - Sin CDN, sin telemetría: la librería
js-yaml.min.jsse sirve desde el mismo origen que la página, así la herramienta funciona sin conexión, detrás de proxies corporativos y en entornos aislados.
¿Cuáles son las aplicaciones comunes de la conversión JSON ↔ YAML?
Pivotar entre JSON y YAML aparece en DevOps, ingeniería de plataforma y tooling de APIs:
- Manifiestos de Kubernetes: convertir un YAML
Deployment,ConfigMapoHelmReleasea JSON para que un validador interno de políticas (Joi, Ajv, OPA Rego) lo pueda linter programáticamente, y luego volverlo a YAML para el apply en el clúster. - Flujos CI/CD: dar la vuelta a un
workflow.ymlde GitHub Actions pasándolo por JSON para que un generador de código reescriba la matriz o las dependencias entre jobs, y emitir el YAML limpio para el PR. - Especificaciones OpenAPI: pegar un
openapi.jsondel backend autogenerado y convertirlo aopenapi.yamlpara la referencia editada por humanos que se sube al repositorio.
¿Cómo se ve un ejemplo de ida y vuelta JSON ↔ YAML?
Pegar {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} y pulsar CONVERTIR en modo JSON → YAML produce ocho líneas de YAML indentado con apiVersion: apps/v1 en la primera línea. Si reintroducimos ese YAML en modo YAML → JSON con Imprimir bonito activado, recuperamos el objeto original byte a byte tras un JSON.stringify(value, null, 2) estable, con el orden de las claves preservado porque el esquema por defecto de js-yaml respeta el orden de inserción en ambas direcciones.
¿Este convertidor JSON ↔ YAML se ejecuta íntegramente en mi navegador?
Sí. Cada pasada de análisis, transformación y emisión se ejecuta localmente como JavaScript dentro de tu pestaña del navegador. La librería js-yaml incluida se sirve desde el mismo origen que la página — sin CDN, sin fetch, sin XMLHttpRequest, sin navigator.sendBeacon sobre la entrada. La herramienta también funciona sin conexión una vez que la página se ha cargado, porque es un bundle estático HTML/CSS/JS con la librería vendor copiada al lado. Los secretos de Kubernetes, los payloads JWT, los YAML firmados de CloudFormation y las configuraciones propietarias se quedan en tu dispositivo.
¿Cómo gestiona el convertidor el YAML multi-documento?
YAML admite varios documentos en un mismo flujo separados por líneas que solo contienen ---. En YAML → JSON el convertidor llama a jsyaml.loadAll, que devuelve cada documento como un valor JavaScript. Si se encuentra exactamente un documento, la salida JSON es directamente ese documento; si se encuentran dos o más, la salida JSON es un array. En JSON → YAML, cuando la entrada es un array JSON Y el interruptor Multi-documento está activado, cada elemento del array se emite como su propio documento con separadores --- entre ellos — útil para generar un bundle compatible con kubectl apply a partir de un array JSON de recursos.
¿Se admiten los anchors y aliases de YAML?
Sí — las definiciones &anchor y las referencias *alias las resuelve el esquema por defecto de js-yaml durante el paso de carga. Una entrada YAML como defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d se analiza a un objeto JSON donde job_a y job_b contienen ambos retries: 3, timeout: 30. La clave de fusión << (una extensión YAML 1.1 que js-yaml sigue respetando) también se soporta en el esquema por defecto.
¿Se preservan los comentarios YAML al convertir a JSON y volver?
No — js-yaml elimina los comentarios durante el paso de análisis, así que una ida y vuelta YAML → JSON → YAML perderá toda línea prefijada con #. Es una limitación conocida del modelo load/dump; si la preservación de comentarios es crítica, utiliza una librería que tenga en cuenta los comentarios, como el paquete npm yaml (que expone una API CST + AST diseñada para preservar trivia), en lugar de js-yaml. Para la mayoría de los flujos de conversión de configuración el compromiso es aceptable: el YAML resultante conserva todas las claves, valores, anchors y aliases, solo que sin los comentarios escritos por humanos.
¿Qué ocurre con las etiquetas YAML personalizadas?
El convertidor utiliza el DEFAULT_SCHEMA de js-yaml, que entiende !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary y !!timestamp — toda etiqueta del core YAML 1.2 y de los esquemas JSON. Las etiquetas personalizadas o específicas de aplicación (p. ej. !Ref en CloudFormation, !vault en Ansible) no se reconocen y aparecen como un error claro citando la etiqueta no soportada. Para CloudFormation en concreto, usa el flujo aws cloudformation package + --output-template-file para expandir las etiquetas personalizadas antes de pegar en este convertidor.
Este convertidor JSON ↔ YAML viene con js-yaml@4.1.0 incluido desde el mismo origen, soporta flujos multi-documento y anchors/aliases de fábrica, e informa de los errores de análisis YAML con línea y columna para que puedas corregir la fuente. Sin subida, sin CDN, sin telemetría — cada byte se queda en tu navegador.