无需登录 数据私有 本地保存

YAML 锚点与别名展开工具 - 还原重复节点

17
0
0
0

YAML 锚点与别名展开工具

还原 & 展开重复节点,将 *alias 替换为实际内容

输入 YAML 就绪
锚点: 0 别名: 0 行数: 0
展开后输出 等待展开
行数: 0 字符: 0
提示:输出中不再包含 *alias 引用,所有别名已被替换为实际值。

常见问题与知识点

YAML 锚点和别名是一种避免重复的机制,类似于编程中的"变量引用"。锚点使用 &name 标记一个节点,别名使用 *name 引用该节点。

这在配置文件(如 Docker Compose、GitLab CI、Ansible、Kubernetes)中非常常见。例如:

# 定义锚点
default_settings: &defaults
  timeout: 30
  retries: 3

# 使用别名引用
service_a:
  <<: *defaults
  name: "Service A"

展开后,*defaults 会被替换为 timeout: 30retries: 3

合并键 << 是 YAML 1.1 规范中定义的映射合并语法。它允许将一个映射(字典)的键值对合并到另一个映射中。

合并键通常与别名结合使用:

base: &base
  image: nginx:latest
  ports:
    - "80:80"

service_web:
  <<: *base
  environment: production

展开后 service_web 将包含 imageportsenvironment 三个键。本工具默认支持合并键展开

可以。别名可以引用包含其他别名的节点,本工具会递归展开所有嵌套引用,直到所有别名都被替换为实际值。

a: &a
  x: 1
b: &b
  <<: *a
  y: 2
c:
  <<: *b
  z: 3

展开后 c 将包含 x: 1y: 2z: 3——所有嵌套引用都被正确解析。

锚点名称遵循以下规则:

  • 可以包含字母(a-z, A-Z)、数字(0-9)、下划线(_)和连字符(-)
  • 区分大小写&MyAnchor&myanchor 是不同的
  • 不能以数字开头(建议以字母或下划线开头)
  • 不能包含空格或特殊字符(如 @#$ 等)
  • 锚点名称只在当前 YAML 文档内有效,不能跨文件引用

展开过程中,YAML 解析器会将内容转换为内部数据结构,原始注释会丢失。输出格式(如缩进、引号风格、多行字符串格式)可能与输入有所不同,因为输出是重新生成的规范 YAML。

建议:在最终配置中使用展开后的 YAML 前,检查关键字段的值是否正确。本工具更适合用于理解复杂配置的结构调试锚点引用关系

本工具支持 YAML 1.1 和 1.2 规范中的常见数据类型:

  • 标量:字符串、整数、浮点数、布尔值、null
  • 序列:列表/数组(使用 - 标记)
  • 映射:键值对/字典
  • 多行字符串:折叠式(>)和保留式(|
  • 标签:如 !!str!!int 等类型标签

锚点和别名可以应用于任何类型的节点,包括标量、序列和映射。

正常情况下,展开后的输出不应包含别名(*name)。如果输出中仍有锚点符号,可能的原因:

  • 输入中 &* 出现在字符串值内部(如 text: "价格 * 数量"),这些不是别名,不会被展开
  • 锚点定义(&name)本身在展开后可能保留(取决于实现),但对应的别名引用已被替换
  • 如果使用了未定义的别名(引用不存在的锚点),解析器会报错

本工具使用深度克隆确保输出中完全消除别名引用,所有 *name 都会被替换为实际内容。

本工具在浏览器中运行,适合处理中小型 YAML 文件(通常不超过 500KB)。对于包含大量锚点嵌套或循环引用的极端情况,建议分批处理。

性能参考:处理约 1000 行含 50+ 锚点别名的 YAML 通常在 100ms 以内完成。

YAML 锚点/别名与 JSON 的 $ref(如 JSON Schema 或 OpenAPI 中的引用)不同:

  • YAML 锚点:是 YAML 解析器在解析时处理的内部引用机制,展开后数据即独立
  • JSON $ref:是应用层定义的引用规范,需要专门的解析器来追踪和展开
  • YAML 锚点不能跨文件,而 JSON $ref 通常支持跨文件引用

本工具专注于展开 YAML 的原生锚点/别名机制。

YAML 锚点和别名在以下工具/平台中广泛使用:

  • Docker Compose — 使用 <<: *common 共享服务配置
  • GitLab CI/CD.gitlab-ci.yml 中使用锚点复用 job 模板
  • Ansible — playbook 中使用锚点减少重复
  • Kubernetes — Helm chart 和 Kustomize 中使用锚点
  • GitHub Actions — workflow YAML 中可使用锚点
  • Spring Boot — application.yml 配置文件

使用本工具可以快速理解这些配置中锚点展开后的完整结构

已复制到剪贴板