yaml语法

最近在写配置的时候, 发现很多配置文件都是用yaml语法, 比如docker-composer k8s等等. 因此整理一下yaml语法以备后续翻阅. 其实很简单, 一眼看上去和json类似.

可以通过网站校验yaml语法是否符合规则: https://www.bejson.com/validators/yaml_editor/

基本语法

  • 使用空格进行缩进(tab 不行)

  • 缩进的空格数目随意, 左侧对其即可.

  • 语法分割的冒号:和逗号,后面必须跟空格

    • 正因如此, 字符串可以直接写成这样: 1234,5678
  • #为整行注释

数据结构

哈希

# 第一种写法, 同级元素整合为一个对象
hash1: 
  name: Xiaoming
  age: 15
# 第二种写法, 也可以写到一行
hash2: {name: XiaoMing, age: 15}
# 当哈希的 key 或 Value 是一个符合类型的时候. 可以使用 ? : 配合的方式. 
# 不过这玩意应该用不到吧,没有谁会写这么个配置
hash3: 
  ?
    name: XiaoMing
    age: 15
  : 
    address: BeiJing
  ? 
    name: LiMing
    age: 20

没了, 简单吧.

数组

# 第一种写法, 使用中横线`-`分割的同级元素, 整合为一个数组
list1: 
  - value1
  - value2
# 第二种写法, 也可以写到一行
list2: [value1, value2]

基本类型

# 基础类型直接写就行
number: 12.30
# 可以使用科学记数法表示
number2: 2.352145e+5
# 二进制表示法
number3: -b1010_0010
# 布尔值. true/false
isMan: true
# ~ 标识 null
parent: ~
# 时间使用 ISO8601 gesh格式标识
isoTime: 2021-12-26T14:45:03.394Z
isoDate: 2021-12-26
# 使用 !! 强制转换数据类型
# 内置类型包括: int, float, bool, str, binary(字符串), timestamp(时间), null, set, omap(哈希列表), pairs(哈希列表), seq(列表), map(哈希)
str1: !!str 1234
str2: !!str true

字符串

其中字符串应该是使用场景最多的了.

# 默认直接写即可
# 注意, 若存在特殊字符会被转义
str1: 一行字符串
# 字符串中包含特殊字符或空格时, 需要使用引号包裹
str2: '空 格'
# 当单引号包裹的字符串中存在单引号, 要使用两个单引号进行转义
str3: '包含单''引号'
# 注意, 双引号字符串不会对字符串进行转义
str4: "空\n格"
# 写成多行的字符串, 从第二行开始要有缩进. 
# 注意, 这种方式, 会将行尾的换行转为空格. 故结果还是一行
str5: 多行字符串
  第二行
  第三行
# 在字符串前面添加标识符可标识不同的情况: 
# `|` 保留行尾换行符, 也会保留末尾的换行
# `>` 不保留行尾换行符, 但会保留末尾的换行. 若中间需要换行符, 留空行即可. 
# `|+` 保留末尾的换行, 也是默认行为
# `|-` 不保留末尾的换行
# `>+` 
# `>-`
str6: |
  添加标识符号的
  前面对其的缩进会被会被去掉
    但是, 已经对其的缩进差异会被保留. 比如这一行

符合类型

以上所有类型可以混合使用. 等等吧, 大家都懂得

# 数组的元素是哈希
list: 
  - name: Name1
    age: 10
  - name: Name2
    age: 20
# 哈希的值是数组
hash: 
  hashList: [V1, V2]

特殊用法

锚点复制

用于对相同的内容进行复用.

names: 
  - name: &name1 XiaoMing
  # 这里引用上方的锚点, 既 &name1
  - name: *name1
# 复制对象
user1: &user1
  name: XiaoMing
  age: 20
user2: 
  # 引用对象的值. << 表示将内容合并到当前. 
  # 其想过相当于: user3
  <<: *user1
  # 可以覆写引用的内容
  age: 30
user3: 
  name: XiaoMing
  age: 30
# 数组引用
ll:
  - &list1
    name: XiaoMing
    age: 30
  # 引用上面的数组元素  
  - *list1

标记分割

可以将多个yaml配置写入到同一个文件中.

---
name: XiaoMing
# 三个点表示一个配置文件的结束
...
# 三个中横线标识一个配置文件的开头
#  一般使用`---`就可以不用再额外写 `...` 了
---
name: LiMing
...

原文地址 https://hujingnb.com/archives/731

转载请保留原文连接: yaml语法 | 烟草的香味

订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x