Guía

Anchors, aliases y merge keys en YAML

Entiende cómo reutiliza nodos YAML, por qué JSON no conserva referencias y qué revisar antes de convertir un archivo con merges.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

Un anchor asigna un nombre a un nodo YAML y un alias vuelve a referirse a ese nodo. Permiten expresar reutilización dentro del grafo de datos.

defaults: &defaults
  timeout: 30
  retries: 3

worker:
  config: *defaults

&defaults crea el anchor y *defaults es el alias. La especificación YAML 1.2.2 explica que los nombres de anchor son un detalle de serialización: el dato resuelto contiene nodos y referencias, no el nombre como propiedad ordinaria.

Qué ocurre al pasar a JSON

JSON representa árboles de objetos y arrays sin una sintaxis de referencias. Un conversor debe elegir entre expandir el nodo, inventar un esquema de referencias o rechazar la entrada. Expandir puede duplicar datos y no representa un ciclo.

El conversor YAML a JSON rechaza anchors y aliases para no ocultar esa decisión. Si quieres JSON, sustituye primero las referencias por datos explícitos y comprueba el tamaño resultante.

Merge key <<

Muchos parsers admiten << para combinar mappings:

defaults: &defaults
  timeout: 30
  retries: 3

worker:
  <<: *defaults
  retries: 5

El resultado esperado suele conservar timeout: 30 y sobrescribir retries con 5, pero el merge key no forma parte del esquema Core de YAML 1.2 y el comportamiento depende del parser y de sus extensiones. Confirma precedencia y compatibilidad en el sistema de destino.

Checklist de migración

  • Busca &, * y claves << fuera de cadenas y comentarios.
  • Resuelve las referencias con el mismo parser que usa la aplicación original.
  • Detecta ciclos antes de expandir.
  • Decide si la duplicación de datos es aceptable.
  • Valida después el JSON y compara valores sobrescritos.

Una conversión segura hace explícita la pérdida de referencias; no las elimina silenciosamente.