在学习Kubernetes的时候经常需要阅读和修改yaml文件,所以我就简单整理一下yaml的基本用法,花十分钟看完,并且简单在线改改这里给出的用例做下实验,基本上就掌握yaml了。
Yaml的简单语法
YAML(发音 /ˈjæməl/中文感觉更像是"叶某or鸭某"),基本语法规则:
- 大小写敏感
- 缩进表层级关系(同样个数的空格算相同层级)
- : 后面一定要加一个空格
- #表注释
好用的Node Anchor
我不知道这个功能中文叫什么,举例用用,大家就知道有多好用了。Node Archor给我感觉就是一个宏定义,并且不能用于{}嵌套。
yaml:
Node Anchor:
a: &name hello
b: *name
c: {nameis: *name} #不能{}嵌套
d:
a:
b: *name
json:
"Node Anchor": {
"a": "hello",
"b": "hello",
"c": {
"nameis": "*name"
},
"d": {
"a": {
"b": "hello"
}
}
},
数据类型
下面简单给出一些例子,介绍了基本的数据类型和使用方法。
在线yaml2json工具,所有用例
String
string:
a: "true"
b: true123
c: 123, 11
对应json:
"string": {
"a": "true",
"b": "true123",
"c": "123, 11"
},
Boolean
boolean:
a: False
b: TRUE
c: faLse # true和false不区分大小写都会被识别为true和false
对应json:
"boolean": {
"a": false,
"b": true,
"c": false
},
Number
number:
a: 0x10 #16进制
b: 012 #8进制
c: 0812 # 8进制
d: 1,2 # 不知道为什么可以且只能加一个,
e: 3.4 # 浮点数
f: 0b11 # 二进制不支持,结果都是0
对应json:
"number": {
"a": 16,
"b": 10,
"c": 10,
"d": 12,
"e": 3.4,
"f": 0
},
Boolean
null:
a: ~
b:
c: null
对应json:
"null": {
"a": null,
"b": null,
"c": null
},
List
list:
a: [a: 1, b: 2, c: 3] #这种写法不会把list里面的元素当做key/value, 而是string
b: [{a: 1}, {b: 2}, {c: 3}]
c:
- a: 1
- b: 2
- c: 3
对应json:
"list": {
"a": [
"a: 1",
"b: 2",
"c: 3"
],
"b": [
{
"a": 1
},
{
"b": 2
},
{
"c": 3
}
],
"c": [
{
"a": 1
},
{
"b": 2
},
{
"c": 3
}
]
},
Hash
a,b 效果相同,d,e效果相同
hash:
a: {a: 1, b: 2, c: 3}
b:
a: 1,
b: 2,
c: 3
c:
a: b: c: 3
d:
a: {b: {c: 3}}
e:
a:
b:
c: 3
对应json:
"hash": {
"a": {
"a": 1,
"b": 2,
"c": 3
},
"b": {
"a": 1,
"b": 2,
"c": 3
},
"c": {
"a": "b: c: 3"
},
"d": {
"a": {
"b": {
"c": 3
}
}
},
"e": {
"a": {
"b": {
"c": 3
}
}
}
}
总结
通过对比yaml和json的结果,其实可以看出来yaml相对于json可读性更好,并且行数更少,敲的字符更少(感觉这才是重点啊!!)。
网友评论