Saltar al contenido

Conversor JSON YAML

Convierte JSON a YAML y YAML a JSON. Los errores indican línea y columna, y valores como yes/no siguen YAML 1.2. Nada sale de tu navegador.

0 caracteres · 0 líneas
Sangría

La salida es YAML 1.2. Las cadenas que un analizador de YAML 1.1 podría leer de otra forma (yes, no, on, off, fechas…) van entre comillas. Especificación YAML 1.2.2 (se abre en una pestaña nueva)

0 caracteres · 0 líneas

Lo que introduces se procesa solo en este navegador y nunca se envía a un servidor. Cómo funciona

Conversión bidireccional entre un objeto JSON y un mapa YAML conservando los valores a y b

Cómo se usa

Elige el sentido en las pestañas de arriba (JSON → YAML o YAML → JSON) y pega tus datos en el cuadro de entrada: el resultado aparece al momento. En JSON → YAML puedes elegir la sangría (2 o 4 espacios) y ordenar las claves; en YAML → JSON, la sangría (2 espacios, 4 espacios o tabulador) y si quieres agrupar varios documentos en un array. Puedes copiar el resultado o descargarlo como archivo .yaml o .json. Con «Abrir archivo» cargas un archivo .json, .yaml o .yml, y el sentido se elige según su extensión. Al cambiar de sentido, el resultado que acabas de obtener pasa al cuadro de entrada para que puedas volver a convertirlo. Si la entrada no es válida, en lugar del resultado verás la línea y la columna del problema junto con el código que lo rodea.

La biblioteca yaml se descarga en la primera conversión.

Relación entre JSON y YAML

Los dos formatos describen datos con objetos (mapeos), arrays (secuencias), cadenas, números, booleanos y null. JSON marca la estructura con llaves, corchetes y comillas dobles; YAML usa sobre todo la sangría, - y :, lo que lo hace más fácil de leer y editar para las personas. YAML 1.2, publicado en 2009, tenía como objetivo principal convertir YAML en un superconjunto estricto de JSON. Por eso un JSON válido casi siempre se puede leer también como YAML, y puedes pegar JSON en el modo YAML → JSON. Al revés no funciona: lo que JSON no tiene —comentarios, anclas, varios documentos— se pierde o se expande al pasar a JSON.

Qué cambia en la conversión

  • Comentarios: la gramática de JSON (RFC 8259) no tiene sitio para los comentarios, así que al convertir YAML a JSON se pierden todos. La propia especificación de YAML establece que los comentarios son un detalle de presentación que no afecta a los datos. Si necesitas dejar una nota, escríbela antes de convertir como una clave con un valor de cadena, por ejemplo _comment: "staging port"; en el resultado aparece como "_comment": "staging port". No todos los # son un comentario: un # sin espacio delante, como en http://a.com/#frag, y un # dentro de comillas siguen formando parte del valor. Si la entrada solo contiene comentarios, sale el error «No hay ningún documento YAML que convertir. Comprueba si la entrada solo tiene comentarios.»
  • Anclas y alias (&name, *name): el valor al que apuntan se copia en su lugar. Para frenar el ataque «billion laughs», en el que los alias se multiplican de forma exponencial, la conversión se detiene si los alias se expanden demasiadas veces (límite por defecto de la biblioteca yaml, maxAliasCount 100). Un archivo normal, que no es un ataque, también se detiene con el mismo error cuando una misma ancla se referencia con 100 alias (con 99 todavía se convierte; el tamaño del valor no influye y una fusión << cuenta como uno). Si un valor que contiene alias se referencia a su vez con un alias, las cifras se multiplican y la conversión se detiene antes. En ese caso, sustituye algunos alias de esa ancla por sus valores.
  • Claves de fusión (<<): no forman parte de los esquemas de YAML 1.2, pero se usan mucho en archivos de configuración como los de docker compose, así que se expanden según las reglas de fusión de YAML 1.1.
  • Varios documentos (---): en YAML → JSON, con «Agrupar varios documentos (—) en un array» activado (opción por defecto), cada documento pasa a ser un elemento de un array JSON, y junto al resultado se muestra cuántos hay, por ejemplo «3 documentos». Si lo desactivas, solo se convierte el primero y un aviso te indica cuántos han quedado fuera. Un documento único no se mete nunca en un array, esté la opción activada o no. Si el archivo termina con un --- sin nada detrás, cuenta como un documento vacío y añade un null al final del array; borra esa línea si no lo quieres. JSON → YAML escribe siempre un único documento: un array de nivel superior no se divide en documentos separados por ---.
  • Orden de las claves: según ambas especificaciones, las claves de un objeto no tienen orden, pero la herramienta respeta el orden de entrada (las claves con forma de número, como "2", no se mueven al principio). Activa «Ordenar claves» en JSON → YAML para ordenar las claves de todos los objetos por unidad de código Unicode.
  • Etiquetas: las que la herramienta no conoce, como !Ref, se quitan y solo se conserva el valor, con un aviso. En ese caso, un valor etiquetado como !Ref 3 o !Ref true pasa a ser una cadena, mientras que los arrays y objetos etiquetados conservan su estructura y los valores que contienen.
  • Valores que JSON no tiene: .inf y .nan no existen en JSON, así que pasan a null con un aviso. Las claves YAML que son arrays u objetos se escriben como texto JSON.
  • Claves duplicadas: la misma clave dos veces en un mapeo YAML incumple la especificación, así que se indica como error. La misma clave dos veces en un objeto JSON conserva solo el último valor, igual que JSON.parse en el navegador, y muestra un aviso.

El problema de Noruega: yes, no, on, off

YAML 1.1 leía también y, yes, on, n, no y off (con varias combinaciones de mayúsculas) como booleanos. Así que si escribías sin comillas el código de país de Noruega, NO, en una lista, se convertía en false; de ahí el nombre de «problema de Noruega». El esquema core de YAML 1.2 redujo los booleanos a true y false (y sus formas en mayúsculas, como True y TRUE). La herramienta lee YAML con ese criterio, así que NO, yes y off siguen siendo cadenas. No hay ningún ajuste para leer el YAML al estilo de la versión 1.1, así que reescribe en el propio YAML como true o false cada valor que necesites como booleano. Una forma que mezcla mayúsculas y minúsculas, como tRue, es una cadena, y también lo es un valor entre comillas como "true".

Sin embargo, algunas herramientas todavía siguen las reglas de YAML 1.1. Por eso, en el resultado de JSON → YAML se ponen entre comillas dobles las cadenas que un analizador 1.1 podría leer como otra cosa: valores con aspecto de booleano (yes, no, on, off, y, n, etc.), con aspecto de fecha (2026-09-28), en base 60 (1:20), números con guion bajo (1_000) y la clave de fusión <<. Un valor entre comillas es una cadena tanto en 1.1 como en 1.2.

Enteros grandes y precisión numérica

Los números de JavaScript son dobles IEEE 754, así que los enteros mayores que 2^53 - 1 (9007199254740991, 16 cifras) pueden ver cambiadas sus últimas cifras. La herramienta trata los enteros como BigInt en los dos sentidos, de modo que incluso valores grandes como los ID de 64 bits llegan cifra a cifra. En JSON → YAML, un cero final como el de 1.0 se mantiene tal como lo escribiste.

En YAML → JSON, 1.0 se convierte en 1, y un 01234 sin comillas también se lee como entero y pasa a ser 1234; de la misma manera, 1.10 pasa a 1.1, 0x1F a 31 y 0o14 a 12. Un código postal, un número de versión o cualquier otro código que deba conservarse exactamente como lo escribiste necesita comillas en el YAML, por ejemplo "01234"; el JSON lo recibe entonces como cadena. JSON → YAML escribe entre comillas las cadenas con aspecto de número, como "01234" o "12345678901234567890", así que al volver a leer ese YAML siguen saliendo cadenas.

Los decimales se tratan como números de doble precisión en los dos sentidos, así que un decimal con muchas cifras significativas como 0.1234567890123456789 se redondea al doble más cercano en cualquiera de los dos. Los números en notación exponencial cambian de forma: en JSON → YAML, 1e3 sale como 1e+3, y en YAML → JSON, 1e3 sale como 1000. Un valor fuera del rango de doble precisión, como 1e400, se convierte en .inf en JSON → YAML. Si el programa que lee tu JSON trata los enteros grandes como números normales, allí puede perderse precisión; cuando el valor exacto importe, lo más seguro es guardarlo como cadena desde el origen.

Para qué sirve

  • Manifiestos de Kubernetes: por convención se escriben en YAML, pero también admiten JSON, y kubectl convierte el manifiesto a JSON u otro formato al llamar a la API. Útil para pasar una respuesta de la API (JSON) a un manifiesto (YAML), o al revés.
  • Flujos de trabajo de GitHub Actions: archivos .yml o .yaml en la carpeta .github/workflows, con sintaxis YAML. Práctico para pasar a un flujo de trabajo una configuración JSON generada por un script.
  • docker compose: el nombre de archivo por defecto es compose.yaml, y las anclas, los alias y las claves de fusión (<<) permiten reutilizar la configuración de los servicios. Al convertir YAML a JSON ves los valores finales con todas las fusiones expandidas.

Fuentes

Preguntas frecuentes

Un JSON con una coma final o con comillas simples da error en JSON → YAML. ¿Hay alguna forma de convertirlo?

Usa YAML → JSON para leer comas finales, comillas simples y claves sin comillas como YAML. Por ejemplo, {'a': 'x', 'b': [1, 2,],} se convierte en {"a": "x", "b": [1, 2]}; cambia el sentido para pasarlo a YAML. Elimina antes los comentarios // y /* */: no son comentarios YAML y pueden producir errores o claves incorrectas. NaN y undefined se leen como cadenas, no como números ni valores especiales.

En el resultado de JSON → YAML aparecen símbolos como |- o |. ¿Ha fallado la conversión?

No. Es la notación de bloque de YAML para una cadena con saltos de línea. Si introduces {"msg": "line1\nline2"}, obtienes msg: |- y, debajo, line1 y line2 sangrados, cada uno en su línea. El | indica que los saltos de línea se mantienen tal cual, y el - que lo sigue, que la cadena no termina en salto de línea. Una cadena que sí termina en uno, como "line1\nline2\n", se escribe con un | sin -. Si vuelves a convertir el resultado con YAML → JSON, sale de nuevo el "line1\nline2" original. En un YAML escrito por ti, usar > en lugar de | da otro resultado: si pones line1 y line2 en dos líneas debajo de msg: >, el salto de línea se convierte en un espacio y queda "line1 line2\n". Un valor que simplemente ocupa dos líneas, sin ningún símbolo, se une de la misma manera y da "line1 line2".

¿En qué se convierte en JSON una clave de YAML con el valor vacío?

En null. Si no pones nada después de los dos puntos, como en port:, el resultado es "port": null; los valores ~, null, Null y NULL también dan null. Si necesitas una cadena vacía, escribe dos comillas, port: "", y saldrá "port": "". En cambio, nil y None no son null: salen como las cadenas "nil" y "None". En JSON → YAML, null se escribe como null y una cadena vacía como "". Las cadenas "null" y "~" se escriben entre comillas, así que al volver a leer ese YAML no se convierten en null. Un objeto vacío y un array vacío salen como {} y [].

¿Qué tamaño máximo puede tener la entrada?

Ambos sentidos aceptan hasta 10MB de entrada UTF-8, pegada o cargada de un archivo. Por ejemplo, 3,5 millones de caracteres hangul ocupan 10.500.000 bytes y superan el límite. El límite afecta a la entrada, no a la salida; divide los datos más grandes antes de convertirlos.

Mi YAML está sangrado con tabuladores y me da error. ¿Qué hago?

YAML no acepta tabuladores como sangría, así que un tabulador al principio de una línea detiene la conversión, y el error señala la línea y la columna del tabulador con el mensaje «YAML no admite tabuladores para la sangría. Usa espacios.» Sustituye por espacios los tabuladores del principio de esa línea y la conversión funcionará; un tabulador entre key: y su valor, o dentro de unas comillas, no da problemas. La opción «Tabulador» de «Sangría» solo define cómo se sangra el JSON que genera YAML → JSON; no tiene nada que ver con el YAML que pegas. El JSON sí puede ir sangrado con tabuladores: JSON → YAML convierte esa entrada con normalidad, y el YAML resultante se sangra con 2 o 4 espacios.

Software de código abierto utilizado: yaml (ISC)

Última actualización: