Guía

Cadenas multilínea en YAML: diferencias entre | y >

Entiende los bloques literal y plegado de YAML, los indicadores de chomping y cómo conservar o unir saltos de línea.

por Tools in a Tab · Publicado el · Actualizada

Respuesta breve

En YAML, | crea un bloque literal y conserva los saltos de línea del contenido. > crea un bloque plegado y convierte la mayoría de los saltos simples en espacios, aunque conserva separaciones de párrafo y bloques más indentados. Los sufijos - y + controlan los saltos finales.

|: bloque literal

Este YAML:

mensaje: |
  primera línea
  segunda línea

representa conceptualmente:

{ "mensaje": "primera línea\nsegunda línea\n" }

Es adecuado para scripts, certificados, fragmentos de configuración o texto en el que cada línea tiene significado. La sangría común se elimina del valor; no forma parte de la cadena.

>: bloque plegado

Con el indicador plegado:

mensaje: >
  primera línea
  segunda línea

el valor habitual es:

{ "mensaje": "primera línea segunda línea\n" }

Resulta útil para párrafos largos que quieres dividir en el archivo sin introducir un salto lógico en cada línea. Una línea vacía mantiene la separación entre párrafos, y una línea con más indentación tiene reglas distintas; por eso > no equivale a reemplazar ciegamente todos los \n por espacios.

Puedes observar el resultado exacto con el conversor YAML a JSON. El conversor acepta el subconjunto YAML 1.2 representable en JSON y muestra los saltos como escapes \n dentro de la cadena resultante.

Sufijos -, sin sufijo y +

El indicador de chomping decide qué ocurre al final del bloque:

Forma Comportamiento final
|- o >- Elimina los saltos finales
| o > Conserva un salto final en un bloque no vacío
|+ o >+ Conserva todos los saltos finales

Por ejemplo, |- es frecuente cuando el valor no debe terminar en nueva línea. |+ solo conviene cuando varios saltos finales son parte real del dato.

Comparar las seis formas con su salida exacta

Pega este ejemplo completo en el conversor YAML a JSON. Cada bloque tiene una línea vacía después de su segunda línea de contenido. Consérvalas al copiar; la clave final fin delimita expresamente el último bloque.

literal_strip: |-
  primera línea
  segunda línea

literal_clip: |
  primera línea
  segunda línea

literal_keep: |+
  primera línea
  segunda línea

folded_strip: >-
  primera línea
  segunda línea

folded_clip: >
  primera línea
  segunda línea

folded_keep: >+
  primera línea
  segunda línea

fin: true

El JSON resultante es:

{
  "literal_strip": "primera línea\nsegunda línea",
  "literal_clip": "primera línea\nsegunda línea\n",
  "literal_keep": "primera línea\nsegunda línea\n\n",
  "folded_strip": "primera línea segunda línea",
  "folded_clip": "primera línea segunda línea\n",
  "folded_keep": "primera línea segunda línea\n\n",
  "fin": true
}

El escape JSON \n representa un carácter de salto de línea en el valor. Literal o plegado decide qué ocurre entre las dos líneas; strip, clip y keep controlan por separado los saltos finales. Estas salidas corresponden a los bloques no vacíos del ejemplo: un bloque vacío no gana texto ni un salto solo por usar |.

Indentación y errores habituales

El contenido debe comenzar más adentro que la clave. YAML suele detectar la indentación a partir de la primera línea no vacía; también permite indicar una profundidad explícita en casos especiales, como |2. No la añadas si no hace falta.

  • Usa | cuando los saltos son datos y > cuando las líneas forman un párrafo.
  • No confundas el guion de |- con un elemento de lista.
  • Comprueba el carácter final si el consumidor compara firmas, plantillas o comandos literalmente.
  • Revisa espacios adicionales: una línea más indentada puede dejar de plegarse.

La especificación YAML 1.2.2 define los estilos literal y plegado, y documenta por separado los indicadores de chomping. Convierte y compara el valor resultante cuando cada byte importe.