当前位置: 首页 > news >正文

一分钟了解YAML,使用场景,和它的优缺点

什么是YAML?

YAML:全称“YAML Ain’t Markup Language”,递归缩写意为“YAML不是标记语言”。YAML由Clark Evans、Ingy döt Net和Oren Ben-Kiki于2001年共同提出,最初命名为“Yet Another Markup Language”(另一种标记语言),后来强调其数据描述属性而非文档标记功能。

2004年发布YAML 1.0标准,2010年推出1.2版本,并成为JSON的超集(兼容JSON语法并扩展功能)。YAML的设计目标是为人类提供更友好的数据序列化格式,尤其在配置文件和数据交换场景中替代XML和JSON的复杂性。

YAML格式长啥样?

以下是一个包含多种数据类型和结构的YAML格式示例,涵盖配置文件的各种常见场景,基本能充分展示YAML的核心特性:

image

 

YAML的格式特点

1 层级结构:

通过空格缩进(禁止制表符)表示层级,缩进长度灵活但需要对齐,相同层级缩进必须保持一致。(如下示例)

2 数据结构:

支持标量(字符串、数字、布尔值、日期、空值等)、列表(以`-`开头,如`- name: "MyApp"`)、字典(键值对`key: value`,如`size: 100MB`)及嵌套组合。

3 语法特性:

  • 注释以`#`开头,支持单行和多行注释。(如`# 强制字符串类型(注释文本内容)`)
  • 多行字符串使用`|`(保留换行)或`>`(折叠换行)表示。
  • 锚点`</span>`与别名`*`实现配置复用,如`&defaults`定义锚点,`<<: *defaults`引用配置。
  • 多文档分隔符`---`支持同一文件包含多个独立文档。

4 支持数据类型:

YAML格式兼容JSON基础数据类型,并扩展了部分复杂类型,如时间戳`created_at:2023-04-01T12:00:00Z`、集合等。YAML也支持类型强制(如`!!str`、`!!int`)。

YAML的使用场景

  • 配置文件:应用配置(如Webpack、Vite)、容器编排(Docker Compose、Kubernetes YAML)、自动化工具(Ansible Playbooks、Terraform)。
  • CI/CD流水线(工作流):GitHub Actions、GitLab CI、Travis CI的流程定义。
  • 静态内容生成:Hexo、Hugo的内容文件,Markdown文档的元数据。
  • 数据交换:API通信(部分RESTful API支持YAML)、日志/缓存数据序列化、测试框架(Jest、Cypress)配置。
  • 基础设施即代码:云资源定义(AWS CloudFormation、Azure ARM模板)、配置管理。

YAML格式的优缺点分析

1 YAML有哪些优点:

  • 高可读性:接近自然语言的缩进和简洁语法,减少冗余符号(如JSON的引号、括号)。
  • 结构灵活:支持复杂嵌套数据结构,锚点/别名减少重复定义。
  • 跨语言兼容:语言无关,广泛库支持(Python的PyYAML、JavaScript的js-yaml、Java的SnakeYAML)。
  • 扩展性强:支持自定义标签、类型强制及多文档处理。
  • 注释支持:便于文档化配置项,提升可维护性。

2 YAML的相对缺点:

  • 缩进敏感:不规范的空格/制表符混用或缩进不一致易导致解析错误。
  • 解析复杂度:相比INI/JSON,YAML解析器需处理缩进、锚点、多文档等特性,大文件解析性能较低。
  • 版本兼容性:YAML 1.1与1.2在部分特性(如集合类型)存在差异,需注意兼容问题。
  • 错误信息模糊:解析错误时可能缺乏明确提示,调试难度较高。
  • 过度设计风险:锚点/别名或复杂嵌套可能增加理解成本,需平衡简洁性与可维护性。
--End--
👨我是`WordBN字远笔记`软件、`C++应用服务器MYCP`开源项目作者💻
📌关注我,每天花一分钟学一个编程知识📚
http://www.jsqmd.com/news/660569/

相关文章:

  • Unity3D超高清照片墙实战:如何突破8192x8192分辨率限制并稳定运行24小时?
  • 如何用3个步骤,让微信聊天记录成为你的数字记忆博物馆?
  • 20块钱的SU-03T语音模块,如何零代码配置唤醒词和命令词(附串口通信避坑指南)
  • 代码随想录算法训练营第三十一天| LeetCode 56 合并区间、LeetCode 738 单调递增的数字
  • 好好的博士生活为什么非得要去水论文:博士生的一点建议
  • 探讨口碑好的净菜配送服务,新鲜净菜配送选哪家比较靠谱 - 工业品牌热点
  • 从500万行游戏代码的实战数据看:TscanCode、Coverity、cppcheck谁在抓Bug上更胜一筹?
  • [T.8] 团队项目:团队贡献分分配规则
  • 3分钟掌握B站字幕下载:免费获取CC字幕的完整教程
  • Windows平台终极APK安装解决方案:APK Installer完整指南
  • 卖货小程序怎么制作?2026三种主流的搭建方式及制作流程详解 - 速递信息
  • 三步解锁Cursor Pro:告别试用限制的终极解决方案
  • mysql如何只更新表中的部分数据_使用update配合where子句
  • Sora2图生视频避坑指南:从API调用到上线运营,我踩过的5个雷(附前端源码调试技巧)
  • 归纳玉米蒸煮袋厂家选择要点,推荐几家优质之选 - 工业推荐榜
  • 从零到一:C语言编程入门实战指南(附50+经典例题解析)
  • Weston.ini配置文件深度解析:不止于旋转和隐藏光标,这些高级选项让你的嵌入式UI更丝滑
  • 2.4G模块开发避坑指南:XN297L寄存器测试中常见的5个SPI时序错误
  • 2026年淮南贴隐形车衣官方授权店推荐,正品核验与热修复门店选购指南 - mypinpai
  • 深聊2026年新鲜切菜供应怎么选择,哪家性价比高 - 工业推荐榜
  • CompressO:如何在本地设备上安全高效地压缩视频与图片文件
  • 别再只画时频图了!用Python的scipy.signal.stft函数,深入理解STFT的幅度谱与相位谱
  • Calibre豆瓣插件:当API关闭时,如何智能获取图书元数据?
  • 如何用UABEA轻松处理Unity资源包:新手终极指南
  • 别再手动算了!拆解PDK模型文件:从BSIM参数直接推导MOS管μCox与λ
  • 开源音频解密技术深度解析:实现跨平台音乐格式兼容的架构设计
  • 如何构建高性能开源四足机器人?OpenDog V3完整实战指南
  • 探寻2026靠谱的geo优化公司,哪家口碑好值得托付 - 工业品网
  • Linux I-O 模型深入理解
  • WechatDecrypt:如何安全解密微信聊天记录?技术原理与操作指南