若是接触过编程数据结构的,对这个上手贼快.
写过json这些的...主要关注下缩进这些,理解下概念即可!
这里只列出非常高频且通用性高的使用姿势,个别骚姿势自行去提案了解!
值得一提的是:
%YAML version
,可以指定使用yaml的版本key
必须为字符串#
行开头到行尾为注释区域str
: 字符串int | float
: 整形及浮点型list(array)
: 可以理解为数组map(dict)
: 不同语言叫法不一样, 字典算是比较通用的解释null(~)
: 空值date
: iso-8601标准的日期格式%YAML 1.2 --- # 这是一条注释,跟bash一样,#号开头 # 最常见的字符串声明,默认会自带单引号(会转义) text: 我是测试文本 text1: '我是测试文本1' text2: '我会被转义\n,因为单引号会对需要转义的进行转义' text3: "双引号则忽略需要转义的,\n\t" text4: "这是多行文本 换行的需要空格缩进, 你可以试试" # |后面可以追加+(保留换行符,默认),-移除每行字符串末尾换行符 text5: | 这种多行文本可读性比较强 类似数组,整齐排列 # 也支持+-,同样是控制换行符 text6: > 这是折叠换行的姿势 会在最后一行末尾保留换行符 试试不就知道了 # 空值,日期声明 isEmpty: ~ isEmpty2: null date: 2020-07-15 #一维数组的写法(也能理解为列表) # 写法一 language: ['c','c++'] # 写法二 hight_language: - 'python' - 'java' # 二维数组 # 写法一 testNestedArr1: - [1,2,3] - [4,5,6] # 写法二, 依托缩进 testNestedArr2: - - Cat - Dog - Goldfish # map的写法,js中也可以理解为对象,也能理解为一些语言的字典 # 写法一 asiaHuman: {eye: 'black',skin: 'yellow'} # 写法二 europeHuman: - eye: 'blue' - skin: 'white' # 数组对象写法 arrayMap: - key: 1 - {test: 'fsadfas'} # 声明锚点,这个可以用来给其他复用,有点类似继承 # 采用&来声明锚点 human: &base foot: true hand: true head: true body: true # 锚点复用,用<<来声明导入(合并到当前),*+锚点来确定引用范围 asiaMan: &asiaM skin: 'yellow' <<: *base otherDesc: - &inline {strong: True} skill: <<: *asiaM <<: *inline it: very good # 类型强制转换 # !!int # 整数类型 # !!float # 浮点类型 # !!bool # 布尔类型 # !!str # 字符串类型 # !!binary # 也是字符串类型 # !!timestamp # 日期时间类型 # !!null # 空值 # !!set # 集合 # !!omap,!!pairs # 键值列表或对象列表 # !!seq # 序列,也是列表 # !!map # 键值表 needStr: !!str '0.01' needBoolean: !!bool 'false' needBoolean2: !!bool 'True' needSeq: !!seq [1,2,2,3] needFloat: !!float '666.6' # 关联数组键,我在折腾k8s的过程看过这个写法 # 特意去了解了下,他可以组合多个key为更复杂的key ? - key1 - key2 : - value1 - {value2: '3'} ... --- # 在线编译器是数据流编译,不能多个文档在线,这部分不能放进去(可以独立测试) # 切割yaml文档,该姿势在k8s的配置文件比较常见 # 以---(三横线)开头 # 以...结束为一个yaml文档 testNestedArr2: - - Cat - Dog - Goldfish ... 复制代码
{ text: '我是测试文本', text1: '我是测试文本1', text2: '我会被转义\\n,因为单引号会对需要转义的进行转义', text3: '双引号则忽略需要转义的,\n\t', text4: '这是多行文本 换行的需要空格缩进, 你可以试试', text5: '这种多行文本可读性比较强\n类似数组,整齐排列\n\n# 也支持+-,同样是控制换行符\n', text6: '这是折叠换行的姿势 会在最后一行末尾保留换行符 试试不就知道了\n', isEmpty: null, isEmpty2: null, date: Wed Jul 15 2020 08:00:00 GMT+0800 (中国标准时间), language: [ 'c', 'c++' ], hight_language: [ 'python', 'java' ], testNestedArr1: [ [ 1, 2, 3 ], [ 4, 5, 6 ] ], testNestedArr2: [ [ 'Cat', 'Dog', 'Goldfish' ] ], asiaHuman: { eye: 'black', skin: 'yellow' }, europeHuman: [ { eye: 'blue' }, { skin: 'white' } ], arrayMap: [ { key: 1 }, { test: 'fsadfas' } ], human: { foot: true, hand: true, head: true, body: true }, asiaMan: { skin: 'yellow', foot: true, hand: true, head: true, body: true }, otherDesc: [ { strong: true } ], skill: { skin: 'yellow', foot: true, hand: true, head: true, body: true, strong: true, it: 'very good' }, needStr: '0.01', needBoolean: false, needBoolean2: true, needSeq: [ 1, 2, 2, 3 ], needFloat: 666.6, 'key1,key2': [ 'value1', { value2: '3' } ] } 复制代码
基于JS-YARML : nodeca.github.io/js-yaml/
yaml一直在更新,包括更复杂的姿势
具体骚的程度看不同语言实现的支持程度!
有兴趣的点击下面的传送门: yaml.org/
为什么会撸这个,主要整理后方便回顾..
有不对之处请留言,会及时修正,谢谢阅读!