YAML入门
程序员文章站
2023-12-30 18:34:28
...
前言
最近作者在学习Spring Boot时,看到可以用一门新的语言去编写相关的配置文件,这就是本篇博客要说明的YAML(文章的大部分资料来源于百度百科)。
YAML简介
YAML(/ˈjæməl/,尾音类似 camel ) 是“YAML不是一种标记语言”的外语缩写 (见前方参考资料原文内容);但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
YAML特性
- YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态
- 它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)
- 尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料
- 由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作
- 其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认
YAML适用场景
- 脚本语言
由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 。除了Java 和 Go,其他都是脚本语言。 - 序列化
YAML比较适合做序列化。因为它是宿主语言数据类型直转的。 - 配置文件
YAML做配置文件也不错。写YAML要比写XML快得多(无需关注标签或引号),并且比ini文档功能更强。
比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事。
由于兼容性问题,不同语言间的数据流转建议不要用YAML
YAML语法
基础语法:
K:(空格)v
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
以此来表示一对键值对(空格不能省略);以空格(不是TAB!)的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
注意 :属性和值的大小写都是十分敏感的。例子:
server:
port: 8081
path: /hello
进阶语法
-
对象、Map(键值对)
k: v1: v2:
在下一行来写对象的属性和值的关系,注意缩进,例如:
student: name: abc age: 3
或者用行内的写法来表示:
student: {name: abc,age: 3}
-
数组(List、Set)
用 - 值表示数组中的一个元素,比如:pets: - cat - dog - pig
或者用行内的写法来表示:
pets: [cat,dog,pig]
YAML和XML的区别
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,以下就是yaml和xml的区别:
- yaml配置:
server:
prot: 8080
- xml配置:
<server>
<port>8081<port>
</server>