【YAML】| 【01】初识YAML

1、简介

YAML是一个可读性高,用来表达资料序列化的格式;
YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式中获得灵感。Clark Evans在2001年首次发表了该语言;
YAML使用空白字符和分行来分隔数据;

在这里插入图片描述

1.1 语法规则
- 大小写敏感;
- 使用缩进表示层级关系;
- 缩进时不允许使用Tab键,只允许使用空格;
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略;

2、数据格式

2.1 数组
 --- # 区块格式
 values:
 - Casablanca
 - North by Northwest
 - Notorious
 --- # 内联格式
 values: [milk, pumpkin pie, eggs, juice]
 --- # 多维数组
 values:
 	-
	 - Casablanca
	-
	 - North by Northwest
	 - Notorious
# 关系数组(key: value)
 --- # 区块模式
   name: John Smith
   age: 33
 --- # 內置形式
 {name: John Smith, age: 33}
2.2 字符串
字符串一般不需要用引号包裹,但是如果字符串中使用了反斜杠“\”开头的转义字符就必须使用引号包裹;
value:
  - Hello without quote # 不用引号包裹
  - Hello
   world # 拆成多行后会自动在中间添加空格
  - 'Hello with single quotes' # 单引号包裹
  - "Hello with double quotes" # 双引号包裹
  - "I am fine. \u263A" # 使用双引号包裹时支持 Unicode 编码
  - "\x0d\x0a is \r\n" # 使用双引号包裹时还支持 Hex 编码
  - 'He said: "Hello!"' # 单双引号支持嵌套"

保留换行

使用竖线符“ | ”来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留;
+表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
lines: |
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行

lines2: |+
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行
  
lines3: |-
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行

# JSON
"lines": "我是第一行\n我是第二行\n  我是吴彦祖\n     我是第四行\n我是第五行"

折叠换行

使用右尖括号“ > ”来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格;
lines: >
  我是第一行
  我也是第一行
  我仍是第一行
  我依旧是第一行

  我是第二行
  这么巧我也是第二行

# JSON
"lines": "我是第一行 我也是第一行 我仍是第一行 我依旧是第一行\n我是第二行 这么巧我也是第二行"
2.3 布尔值
true、True、TRUE、yes、Yes和YES皆为真;
false、False、FALSE、no、No和NO皆为假;
boolean:
  - true # True、TRUE
  - yes # Yes、YES
  - false # False、FALSE
  - no # No、NO
2.4 整数
支持二进制表示
int:
  - 666
  - 0001_0000 # 二进制表示

# JSON
"int": [ 666, 4096 ]
2.5 浮点数
float:
  - 3.14
  - 6.8523015e+5 # 使用科学计数法

# JSON
"float": [ 3.14, 685230.15 ]
2.6 NULL
null、Null和~都是空,不指定值默认也是空;
nulls:
  - null
  - Null
  - ~
  -

# JSON
"nulls": [ null, null, null, null ]
2.7 时间戳
# YAML
date1: 2020-05-26
date2: 2020-05-26T01:00:00+08:00
dete3: 2020-05-26T02:00:00.10+08:00
date4: 2020-05-26 03:00:00.10 +8

// JavaScript
date1: Tue May 26 2020 08:00:00 GMT+0800 (中国标准时间),
date2: Tue May 26 2020 01:00:00 GMT+0800 (中国标准时间),
dete3: Tue May 26 2020 02:00:00 GMT+0800 (中国标准时间),
date4: Tue May 26 2020 03:00:00 GMT+0800 (中国标准时间)

3、类型转换

YAML 支持使用严格类型标签“!!”(双感叹号+目标类型)来强制转换类型;
# YAML
a: !!float '666' # !! 为严格类型标签
b: '666' # 其实双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串

# JSON
"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true"
"f": "yes"

4、其他高级类型

4.1 引用、锚点标签
可以快速引用相同的一些数据
# YAML
a: &anchor # 设置锚点
  one: 1
  two: 2
  three: 3
b: *anchor # 引用锚点

# JSON
"a": {
  "one": 1,
  "two": 2,
  "three": 3
},
"b": {
  "one": 1,
  "two": 2,
  "three": 3
}
4.2 合并标签
使用可以与任意数据进行合并,你可以把这套操作想象成面向对象语言中的继承;
# YAML
human: &base # 添加名为 base 的锚点
    body: 1
    hair: 999
singer:
    <<: *base # 引用 base 锚点,实例化时会自动展开
    skill: sing # 添加额外的属性
programer:
    <<: *base # 引用 base 锚点,实例化时会自动展开
    hair: 6 # 覆写 base 中的属性
    skill: code # 添加额外的属性

// JSON
"human": { "body": 1, "hair": 999 },
"singer": { "body": 1, "hair": 999, "skill": "sing" },
"programer": { "body": 1, "hair": 6, "skill": "code" }

参考

https://www.ruanyifeng.com/blog/2016/07/yaml.html
https://zh.wikipedia.org/wiki/YAML
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值