YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化标准,最初于2001年发布。它以缩进表示层级结构,语法简洁直观,被广泛用于Kubernetes配置、Docker Compose文件、CI/CD流水线(GitHub Actions/GitLab CI)、Ansible Playbook等场景。YAML是JSON的超集,任何有效的JSON也是有效的YAML。
• 缩进层级:使用空格(不能用Tab),通常2个或4个空格为一层级
• 键值对:格式为 key: value,冒号后必须有空格
• 列表:以短横线 - item 开头表示数组元素
• 注释:以 # 开头,到行尾结束
• 多行字符串:| 保留换行,> 折叠换行为空格
• Tab缩进:YAML规范禁止Tab,应替换为2个空格
• 冒号后缺少空格:必须写成 key: value 而非 key:value
• 混用空格和Tab:同一文件中缩进字符必须一致
• 特殊字符未引号包裹:如 yes/no/on/off 会被解析为布尔值,应加引号
本YAML格式化校验工具操作简单且功能完善,以下是详细的使用指南:
格式化YAML:在左侧输入框中粘贴需要格式化的YAML内容(如Kubernetes ConfigMap、Docker Compose文件、GitHub Actions工作流等),点击「格式化」按钮,工具会自动重新排版,统一缩进层级(默认2个空格),并修正常见的格式问题。格式化后的YAML会以标准格式显示在右侧结果区域,支持一键复制。
校验语法:输入YAML后点击「校验语法」按钮,工具会逐行解析YAML结构,检查缩进错误、非法字符、未闭合的引号等常见问题。如果检测到语法错误,会在页面上方显示详细的错误信息,包括错误类型和大概位置,帮助你快速定位并修复问题。
YAML转JSON:在输入框中粘贴YAML内容,点击「YAML转JSON」按钮,工具会将YAML解析为JSON格式输出。这在需要与非YAML系统交互时非常有用,例如将Kubernetes配置转换为JSON格式供API调用,或将Docker Compose配置转换为JSON以便程序化解析。
JSON转YAML:在输入框中粘贴JSON内容,点击「JSON转YAML」按钮,工具会将JSON转换为更简洁的YAML格式。这在编写配置文件时特别有用——先用JSON快速构建结构,再转换为YAML获得更好的可读性,或者直接复制到Kubernetes/Docker配置文件中使用。
压缩模式:点击「压缩」按钮可以将YAML中的多余空格和换行移除,生成单行紧凑格式。这在需要减少文件体积(如嵌入到其他文件中)或通过网络传输时非常有用。注意:压缩后的YAML可读性较差,不建议作为最终配置文件保存。
YAML格式化校验工具在DevOps和开发工作中应用广泛,以下是几个典型的使用场景:
Kubernetes配置调试:在编写Kubernetes的Deployment、Service、ConfigMap等YAML文件时,经常出现缩进错误或语法问题。将这些配置粘贴到本工具中格式化并校验,可以快速发现潜在错误,避免部署到集群时因格式问题导致失败。同时可以将Kubernetes API返回的JSON转换为YAML,便于阅读和理解。
Docker Compose编排优化:Docker Compose文件通常包含多个服务的配置,层级较深,手动维护容易出错。通过本工具的格式化功能,可以统一缩进风格,使文件结构一目了然。在团队协作中,统一的YAML格式规范也能提升代码审查效率。
CI/CD流水线配置:GitHub Actions、GitLab CI、Jenkins Pipeline等CI/CD工具大量使用YAML格式。这些配置通常较长且嵌套层级深,使用本工具可以方便地查看层级关系、校验语法,并转换为JSON格式与其他系统集成。特别是在调试复杂的条件判断和矩阵构建配置时,格式化后的YAML更容易发现问题。
Ansible Playbook管理:Ansible使用YAML定义自动化任务(Playbook),其中涉及变量定义、任务列表、角色引用等复杂结构。格式化后的Playbook更易于维护和审查,校验功能也能帮助及时发现语法错误,避免在目标主机上执行时出现意外行为。
YAML版本演进:YAML规范经历了多次迭代。YAML 1.0于2004年发布,1.1于2005年发布增加了更多类型标签,YAML 1.2于2009年发布与JSON完全兼容(JSON被定义为YAML的子集)。当前主流工具(如Kubernetes、Docker Compose)大多遵循YAML 1.2规范。本工具兼容YAML 1.2核心特性。
YAML vs JSON vs TOML:三者都是流行的数据序列化格式,但适用场景不同。YAML可读性最佳,适合人工编写和阅读的配置文件;JSON解析性能最好,适合API数据交换和配置文件解析(如package.json);TOML语法更简单(类似INI文件),适合简单配置。选择时需权衡可读性、性能和工具生态。
YAML锚点和引用:YAML支持通过 &anchor 定义锚点,通过 *reference 引用锚点,并通过 <<: 合并到现有映射中。这在需要重复相同配置块的场景中非常高效。例如Docker Compose中多个服务共享相同的网络配置时,使用锚点可以避免重复代码,提高可维护性。
安全注意事项:YAML解析器(尤其是PyYAML)历史上曾存在严重的反序列化漏洞(如CVE-2020-14343),攻击者可通过恶意构造的YAML文件执行任意代码。建议在生产环境中使用经过安全审计的YAML库(如ruamel.yaml),并避免解析来自不可信来源的YAML内容。
YAML是JSON的超集,语法更简洁人类可读,支持注释、多行字符串、锚点和引用。JSON是严格的键值对格式,解析更快但可读性差。YAML适合配置文件,JSON适合数据交换。
不会。所有处理都在浏览器本地完成,数据不会上传到任何服务器。刷新页面后输入的内容会丢失,建议及时复制保存。
YAML标准使用空格缩进,通常2个或4个空格。禁止使用Tab字符,因为不同编辑器对Tab的解释不同,会导致解析错误。本工具格式化时默认使用2个空格。
YAML规范明确禁止使用Tab缩进。Tab在不同系统/编辑器中宽度不一致(可能显示为2/4/8个空格),会导致解析器对缩进层级产生歧义,从而引发不可预期的解析错误。
本工具采用纯JavaScript实现,支持YAML 1.2核心规范中的绝大多数特性,包括标量类型(字符串、数字、布尔、null)、序列、映射、注释、多行字符串(|和>)、锚点(&)和引用(*)。
会。JSON标准不支持注释,因此YAML中的注释在转换为JSON时会自动移除。如果需要保留注释说明,建议在转换前将重要注释提取到文档中保存。
将ConfigMap的YAML内容粘贴到本工具的输入框中,工具会自动解析并校验YAML语法。如果解析成功,说明YAML语法正确。注意:本工具验证YAML语法结构,不验证Kubernetes API字段的合法性。
锚点(&name)用于标记一个节点,引用(*name)用于复用该节点。这在需要多处使用相同配置块时非常有用,如Docker Compose中多个服务共享相同的网络或卷配置。修改锚点定义即可同步更新所有引用位置。