先看结论
- YAML 是一种基于 Unicode 的数据序列化语言,用可读文本表示配置和交换数据,但加载为程序数据需要支持相应版本和标签的处理器。
- 在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。
- 高风险来自不安全解析。标签处理可能触发意外代码执行,因此反序列化器应默认禁用代码执行,并使用安全加载方式。循环引用及别名展开可能造成无限循环或指数级数据膨胀,需要验证输入并限制锚点递归深度。文件能阅读或成功加载,都不能证明其安全。
YAML 文件怎么打开:格式、兼容性与安全解析
YAML 是“YAML Ain’t Markup Language”的递归缩写,面向人类阅读,可跨编程语言使用,常用于配置文件和数据交换。基本结构是映射、序列和标量:缩进可表示层级,冒号分隔键值,短横线表示列表项;还支持类型标签、锚点和别名。登记的媒体类型为 application/yaml,首选扩展名为 .yaml,也认可 .yml,未登记固定魔数。
YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。
怎么打开
在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。
在 Windows 或 Mac 上,用文本编辑器打开 .yaml 或 .yml 文件即可阅读内容;在手机上,使用能访问该文件的文本编辑器。阅读文本不需要反序列化。若要让程序加载其中的数据,需要使用支持相应 YAML 版本和标签的处理器。加载失败时应检查缩进和语法。一个 YAML 流可以包含多个文档;只接受单文档的应用应对额外文档报错。
YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。
文件安全
高风险来自不安全解析。标签处理可能触发意外代码执行,因此反序列化器应默认禁用代码执行,并使用安全加载方式。循环引用及别名展开可能造成无限循环或指数级数据膨胀,需要验证输入并限制锚点递归深度。文件能阅读或成功加载,都不能证明其安全。
来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。
转换格式
YAML 转 JSON 不能假定无损:注释、指令及别名表示可能丢失,非字符串键、循环引用和非 JSON 类型还需要额外处理。转换后应核对需要保留的数据,不能只看是否成功生成 JSON。
先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。
常见问题
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 锚点和别名怎么使用,需要哪些限制?
锚点标记节点,别名引用带有锚点的节点。循环引用或别名展开可能导致无限循环或指数级数据膨胀,因此处理器需要验证输入并限制锚点递归深度。
相关格式
资料来源
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