00

先看结论

  • YAML 是一种基于 Unicode 的数据序列化语言,用可读文本表示配置和交换数据,但加载为程序数据需要支持相应版本和标签的处理器。
  • 在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。
  • 高风险来自不安全解析。标签处理可能触发意外代码执行,因此反序列化器应默认禁用代码执行,并使用安全加载方式。循环引用及别名展开可能造成无限循环或指数级数据膨胀,需要验证输入并限制锚点递归深度。文件能阅读或成功加载,都不能证明其安全。
01

YAML 文件怎么打开:格式、兼容性与安全解析

YAML 是“YAML Ain’t Markup Language”的递归缩写,面向人类阅读,可跨编程语言使用,常用于配置文件和数据交换。基本结构是映射、序列和标量:缩进可表示层级,冒号分隔键值,短横线表示列表项;还支持类型标签、锚点和别名。登记的媒体类型为 application/yaml,首选扩展名为 .yaml,也认可 .yml,未登记固定魔数。

先把原文件留着

YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。

02

怎么打开

在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。

只想看看内容

在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。

要发给别人

YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。

03

文件安全

高风险来自不安全解析。标签处理可能触发意外代码执行,因此反序列化器应默认禁用代码执行,并使用安全加载方式。循环引用及别名展开可能造成无限循环或指数级数据膨胀,需要验证输入并限制锚点递归深度。文件能阅读或成功加载,都不能证明其安全。

这几种情况先别打开

来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。

04

转换格式

YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。

转换之前

先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。

05

常见问题

YAML 文件是什么格式,主要用来做什么?

YAML 是面向人类阅读、可跨编程语言使用的数据序列化语言,常用于配置文件和数据交换,以映射、序列和标量表示数据。

Windows 怎么打开 YAML 文件?

用文本编辑器打开 .yaml 或 .yml 文件即可阅读。如果要让应用加载为程序数据,其 YAML 处理器还必须支持文件使用的版本和标签。

Mac 用什么打开 YML 文件?

在 Mac 上用文本编辑器打开 .yml 或 .yaml 文件即可查看内容。若要加载成程序数据,还需要兼容相应版本和标签的 YAML 处理器。

手机怎么打开 YAML 文件?

使用能够访问手机中该文件的文本编辑器进行阅读。YAML 是纯文本,编辑器可以显示其内容;若要加载为程序数据,还需要兼容的 YAML 处理器。

YAML 加载失败时,如何检查 YAML 缩进和语法?

用兼容的 YAML 处理器检查缩进、键值分隔符和列表标记。加载失败也可能是标签无法解析、无法识别或无法构造本地数据类型。若应用只接受一个文档,额外文档也应触发错误。

YAML 和 YML 扩展名有什么区别?

两者都是认可的 YAML 扩展名。RFC 9512 将 .yaml 列为首选,同时认可 .yml。选择不同扩展名不能解决 YAML 版本或标签的兼容性问题。

YAML 转 JSON 会丢失哪些内容?

注释、指令及别名表示可能丢失。非字符串键、循环引用和非 JSON 类型还需要额外处理,因此不能把 YAML 转 JSON 视为必然无损。

如何安全解析不可信的 YAML 文件?

使用默认禁用代码执行的安全加载方式,验证输入,并限制锚点递归深度。标签处理、循环引用和别名展开都有风险;这些措施能降低风险,但不能保证文件一定安全。

YAML 1.1 和 1.2 布尔值有什么区别,会影响兼容性吗?

不同版本对隐式布尔值的解释可能不同。为减少兼容性问题,应使用 YAML 1.2 核心模式允许的 true 或 false 大小写形式,并确认接收端处理器使用的版本。

YAML 锚点和别名怎么使用,需要哪些限制?

锚点标记节点,别名引用带有锚点的节点。循环引用或别名展开可能导致无限循环或指数级数据膨胀,因此处理器需要验证输入并限制锚点递归深度。

06

相关格式

资料来源

YAML Ain’t Markup Language (YAML) Version 1.2, Revision 1.2.2 · YAML 官方规范 / YAML Language Development Team

RFC 9512: YAML Media Type · IETF / RFC Editor