YAML 解析器
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,广泛用于配置文件。此工具支持完整的 YAML 1.2 规范解析,包括锚点、别名和多文档流,并以交互式树形视图显示结果。
规范
常见用例
- 解析和验证 Kubernetes 清单(Deployment、Service、ConfigMap)
- 读取 Docker Compose 和 docker-compose.yml 文件
- 调试 GitHub Actions、GitLab CI 或 CircleCI 工作流
- 将 Ansible playbook 转换为 JSON 进行程序化处理
- 验证 Helm chart values 文件
功能
- 完整支持 YAML 1.2 规范
- 处理锚点(&)和别名(*)以实现内容复用
- 解析多文档流(--- 分隔符)
- 转换为 JSON、TOML 或 XML
- 语法验证并提供行级错误消息
- 用于嵌套结构的交互式树形视图
示例
Kubernetes Deployment
试试看 →一个定义了复制 nginx Pod 的 Kubernetes Deployment 清单。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginxDocker Compose
试试看 →一个定义了 Web 和数据库服务的 Docker Compose 文件。
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret提示
- YAML 对缩进敏感。使用空格,不要使用制表符。
- 字符串不需要引号,除非包含特殊字符。
- 使用锚点(&name)和别名(*name)避免重复内容。
- 多行字符串可以使用 |(字面量)或 >(折叠)块标量。
理解 YAML 解析器
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,广泛用于 DevOps、云基础设施和应用程序配置。其基于缩进的语法消除了方括号和花括号的视觉噪音,使其成为基础设施即代码工具、CI/CD 流水线和容器编排的首选格式。
YAML 的核心优势是可读性。Kubernetes Deployment 清单、GitHub Actions 工作流或 Docker Compose 文件以 YAML 编写时一目了然。该格式支持标量(字符串、数字、布尔值、null、日期)、序列(数组)和映射(键值对)。字符串通常不需要引号,多行内容可以使用字面量块(|)或折叠块(>),锚点(&)和别名(*)允许您定义一次值并多次引用,减少大型配置文件中的重复。
YAML 1.2 是当前规范,是 JSON 的严格超集:每个有效的 JSON 文档也是有效的 YAML。这意味着您可以在同一文件中混合使用 YAML 和 JSON 语法。通过 --- 分隔符的多文档支持允许在单个文件中嵌入多个独立文档,这在 Kubernetes 清单和 Helm 模板中很常见。
YAML 的主要陷阱是对空白字符的敏感性。制表符不允许用于缩进(仅允许空格),错误对齐的键可能会静默地改变文档结构。"挪威问题"——未加引号的值如 "no"、"yes"、"on" 和 "off" 被解释为布尔值——是另一个臭名昭著的 bug 来源。YAML 1.2 解决了其中一些问题,但许多解析器默认仍使用 YAML 1.1 规则。
YAML 1.1 定义了广泛的布尔字面量集,包括 yes/no、on/off、true/false 及其大写变体。像 NO 这样的国家代码会被解析为布尔值 false,字符串 "on" 会变成 true——这就是臭名昭著的"挪威问题"。YAML 1.2 将布尔值限制为仅 true 和 false,但许多流行的解析器(包括 PyYAML)默认仍使用 YAML 1.1 规则。安全的做法是始终为可能被误解的字符串加上引号。制表符也严格禁止用于缩进;仅允许使用空格,缩进中的制表符将导致解析错误。每级两个空格是最常见的约定。
YAML 为多行字符串提供了两种块标量样式。字面量块标量(|)精确保留换行符,非常适合嵌入式脚本或 SQL 查询。折叠块标量(>)用空格连接连续行,适用于长描述或段落。两种样式都支持修饰符:|- 和 >- 去除尾部换行符,而 |+ 和 >+ 保留所有尾部换行符。
锚点和别名是 YAML 重用内容的机制。锚点(&name)标记一个节点以供后续引用,别名(*name)在文档的其他位置插入该节点。结合合并键(<<: *defaults),此模式允许您定义一次共享设置并将其合并到多个映射中。这在 CI/CD 配置中特别有用,因为许多作业共享相同的环境变量、缓存规则或部署步骤。