YAML 配置 (.yaml)

YAML 标准

YAML 不是标记语言 (YAML) 是现代 DevOps、云基础设施(Kubernetes、Docker Compose)和 CI/CD 自动化的主流数据序列化格式,它通过清晰的空白缩进来强调人类可读性。

将 YAML 转换为 JSON

免费的浏览器端 YAML 转 JSON 转换器。在您的设备上即时转换文件。

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 YAML 文件:

选择或将文件拖放到此处

100% 浏览器端私密转换 - 文件绝不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (Magic Bytes)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 YAML 文件:

十六进制签名 (偏移量 0):

2D 2D 2D 0A

ASCII 表示形式: ---\n

标准化: YAML 1.2.2 Specification

技术规格

容器架构Indentation-based human-friendly data serialization format superset of JSON supporting anchors and aliases
压缩方式Uncompressed text stream
字节序UTF-8 / Unicode text stream
色彩空间N/A (Data Serialization)
通道与结构Mappings (key-value dictionaries), sequences (lists), scalar types (strings, numbers, booleans), and anchors (&ref/*ref)
最大尺寸Unbounded document size (supports multi-document streams separated by '---')
透明度None
流式传输与渐进式加载Multi-document streams allow sequential document-by-document processing

技术对比矩阵:YAML 对比同类产品

技术属性YAML (当前)JSONTOMLXML
语法风格缩进空白层级严格的方括号和引号表格和 key=value 键值对冗长的开始/结束标签
注释支持原生(# 注释)不允许注释原生(# 注释)<!-- 注释 -->
DevOps 采用度通用标准(Kubernetes、CI/CD)通用 API 标准Rust/Python 包配置企业传统配置
数据重用原生锚点 (&) 和别名 (*)无(手动重复)无(手动重复)XML 实体

常见损坏模式与十六进制恢复指南

解析器错误:'mapping values are not allowed here'(此处不允许映射值)或缩进错误。

根本原因: 混合使用制表符与空格,或未对齐的缩进级别。

恢复方法: 将制表符转换为空格并使用 File2File YAML 格式化工具验证语法。

安全分析与解析器攻击向量

支持自定义类型标签的 YAML 解析器(如 PyYAML 的 'yaml.load()')历史上曾允许通过任意对象实例化执行远程代码。

已知攻击向量

  • 通过不安全的对象反序列化标签(例如 '!!python/object/apply')执行任意代码。
  • 实体扩展炸弹(使用 YAML 锚点和别名的十亿笑话等效项)。
  • 由于隐式布尔值和时间戳解析导致的类型混淆漏洞。

防御性最佳实践:

历史渊源与里程碑

2021发布 YAML 1.2.2 修订版,完善了 JSON 兼容性和形式语法定义。
2009YAML 1.2 将 YAML 标准化为 JSON 的严格超集,这意味着所有有效的 JSON 都是有效的 YAML。
2001Clark Evans、Ingy döt Net 和 Oren Ben-Kiki 创建 YAML 作为 XML 的人类友好替代品。

核心优势与特点

  • 现代云基础设施无可争议的标准:广泛应用于 Kubernetes 清单、Docker Compose 和 GitHub Actions 中。
  • 干净、可读的语法:通过直观的缩进消除了大括号、方括号和引号的杂乱。
  • 支持引用和锚点(&anchor / *anchor),以重复使用配置块而无需重复。

技术局限与劣势

  • 对空白敏感:意外的制表符或单个多余的空格可能会破坏文档层级或导致解析错误。
  • 臭名昭著的类型强制转换漏洞:未加引号的单词(如 'no'、'on'、'yes' 或国家代码,如挪威的 'NO')可能会无声地变成布尔值。
  • 与二进制格式或严格的 JSON 相比,解析速度明显较慢。

趣味技术冷知识

  • YAML 最初代表"Yet Another Markup Language"(另一种标记语言),但为了强调数据序列化,被幽默地更名为递归首字母缩写词"YAML Ain't Markup Language"(YAML 不是标记语言)。
  • "挪威问题"是一个著名的编程漏洞,其中 YAML 文件中的国家代码 'NO' 被解析为布尔值 'false'。
  • 世界上每个有效的 JSON 文件同时也 100% 是有效的 YAML 文件。

常见技术问题

YAML 的用途是什么?

YAML 是云计算、Kubernetes 集群部署、Docker Compose 文件、GitHub Actions 工作流和软件设置的主要配置语言。

我可以在 YAML 文件中使用制表符(Tab)吗?

不可以。官方 YAML 规范严格禁止使用制表符进行缩进;您必须始终使用空格(通常每级 2 个空格)。

如何将 YAML 转换为 JSON?

您可以在网页浏览器中直接使用 File2File.app,以极高的隐私性一键将 YAML 文件转换为干净、验证过的 JSON。