【YAML】一文掌握 YAML 的具体用法(YAML 备忘速查)

打印 上一主题 下一主题

主题 1799|帖子 1799|积分 5397

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是理解和编写 YAML 格式设置文件的快速参考备忘单。
参考:


  • YAML Reference Card (yaml.org)
  • Learn X in Y minutes (learnxinyminutes.com)
  • YAML lint online (yamllint.com)
  • INI 格式设置文件备忘清单 (jaywcjlove.github.io)
  • TOML 格式设置文件备忘清单 (jaywcjlove.github.io)
入门

介绍

YAML 是一种数据序列化语言,旨在供人类直接读写


  • YAML 不允许利用制表符
  • 元素部门之间必须有空间
  • YAML 区分巨细写
  • 以 .yaml 或 .yml 扩展名结束您的 YAML 文件
  • YAML 是 JSON 的超集
  • Ansible playbook 是 YAML 文件
  标量类型

  1. n1: 1            # 整数
  2. n2: 1.234        # 浮点
  3. s1: 'abc'        # 字符串
  4. s2: "abc"        # 字符串
  5. s3: abc          # 字符串
  6. b: false         # 布尔类型
  7. d: 2015-04-05    # 日期类型
复制代码
↓ 等效的 JSON

  1. {
  2.   "n1": 1,
  3.   "n2": 1.234,
  4.   "s1": "abc",
  5.   "s2": "abc",
  6.   "s3": "abc",
  7.   "b": false,
  8.   "d": "2015-04-05"
  9. }
复制代码
利用空格缩进。 元素部门之间必须有空间。
变量

  1. some_thing: &VAR_NAME foobar
  2. other_thing: *VAR_NAME
复制代码
↓ 等效的 JSON

  1. {
  2.   "some_thing": "foobar",
  3.   "other_thing": "foobar"
  4. }
复制代码
表明

  1. # A single line comment example
  2. # block level comment example
  3. # comment line 1
  4. # comment line 2
  5. # comment line 3
复制代码
多行字符串

  1. description: |
  2.   hello
  3.   world
复制代码
↓ 等效的 JSON

  1. {"description": "hello\nworld\n"}
复制代码
继承

  1. parent: &defaults
  2.   a: 2
  3.   b: 3
  4. child:
  5.   <<: *defaults
  6.   b: 4
复制代码
↓ 等效的 JSON

  1. {
  2.   "parent": {
  3.     "a": 2,
  4.     "b": 3
  5.   },
  6.   "child": {
  7.     "a": 2,
  8.     "b": 4
  9.   }
  10. }
复制代码
参考

  1. values: &ref
  2.   - Will be
  3.   - reused below
  4.   
  5. other_values:
  6.   i_am_ref: *ref
复制代码
↓ 等效的 JSON

  1. {
  2.   "values": [
  3.     "Will be",
  4.     "reused below"
  5.   ],
  6.   "other_values": {
  7.     "i_am_ref": [
  8.       "Will be",
  9.       "reused below"
  10.     ]
  11.   }
  12. }
复制代码
折叠的字符串

  1. description: >
  2.   hello
  3.   world
复制代码
↓ 等效的 JSON

  1. {"description": "hello world\n"}
复制代码
两份文件

  1. ---
  2. document: this is doc 1
  3. ---
  4. document: this is doc 2
复制代码
YAML利用---将指令与文档内容分开。
YAML Collections

序列

  1. - Mark McGwire
  2. - Sammy Sosa
  3. - Ken Griffey
复制代码
↓ 等效的 JSON

  1. [
  2.   "Mark McGwire",
  3.   "Sammy Sosa",
  4.   "Ken Griffey"
  5. ]
复制代码
映射

  1. hr:  65       # Home runs
  2. avg: 0.278    # Batting average
  3. rbi: 147      # Runs Batted In
复制代码
↓ 等效的 JSON

  1. {
  2.   "hr": 65,
  3.   "avg": 0.278,
  4.   "rbi": 147
  5. }
复制代码
映射到序列

  1. attributes:
  2.   - a1
  3.   - a2
  4. methods: [getter, setter]
复制代码
↓ 等效的 JSON

  1. {
  2.   "attributes": ["a1", "a2"],
  3.   "methods": ["getter", "setter"]
  4. }
复制代码
映射序列

  1. children:
  2.   - name: Jimmy Smith
  3.     age: 15
  4.   - name: Jimmy Smith
  5.     age: 15
  6.   -
  7.     name: Sammy Sosa
  8.     age: 12
复制代码
↓ 等效的 JSON

  1. {
  2.   "children": [
  3.     {"name": "Jimmy Smith", "age": 15},
  4.     {"name": "Jimmy Smith", "age": 15},
  5.     {"name": "Sammy Sosa", "age": 12}
  6.   ]
  7. }
复制代码
序列的序列

  1. my_sequences:
  2.   - [1, 2, 3]
  3.   - [4, 5, 6]
  4.   -  
  5.     - 7
  6.     - 8
  7.     - 9
  8.     - 0
复制代码
↓ 等效的 JSON

  1. {
  2.   "my_sequences": [
  3.     [1, 2, 3],
  4.     [4, 5, 6],
  5.     [7, 8, 9, 0]
  6.   ]
  7. }
复制代码
映射的映射

  1. Mark McGwire: {hr: 65, avg: 0.278}
  2. Sammy Sosa: {
  3.     hr: 63,
  4.     avg: 0.288
  5.   }
复制代码
↓ 等效的 JSON

  1. {
  2.   "Mark McGwire": {
  3.     "hr": 65,
  4.     "avg": 0.278
  5.   },
  6.   "Sammy Sosa": {
  7.     "hr": 63,
  8.     "avg": 0.288
  9.   }
  10. }
复制代码
嵌套集合

  1. Jack:
  2.   id: 1
  3.   name: Franc
  4.   salary: 25000
  5.   hobby:
  6.     - a
  7.     - b
  8.   location: {country: "A", city: "A-A"}
复制代码
↓ 等效的 JSON

  1. {
  2.   "Jack": {
  3.     "id": 1,
  4.     "name": "Franc",
  5.     "salary": 25000,
  6.     "hobby": ["a", "b"],
  7.     "location": {
  8.         "country": "A", "city": "A-A"
  9.     }
  10.   }
  11. }
复制代码
无序集

  1. set1: !!set
  2.   ? one
  3.   ? two
  4. set2: !!set {'one', "two"}
复制代码
↓ 等效的 JSON

  1. {
  2.   "set1": {"one": null, "two": null},
  3.   "set2": {"one": null, "two": null}
  4. }
复制代码
集合表现为一个映射,此中每个键都与一个空值相关联
有序映射

  1. ordered: !!omap
  2. - Mark McGwire: 65
  3. - Sammy Sosa: 63
  4. - Ken Griffy: 58
复制代码
↓ 等效的 JSON

  1. {
  2.   "ordered": [
  3.      {"Mark McGwire": 65},
  4.      {"Sammy Sosa": 63},
  5.      {"Ken Griffy": 58}
  6.   ]
  7. }
复制代码
YAML 参考

条款



  • 序列又名数组或列表
  • 标量又名字符串或数字
  • 映射又名哈希或字典
  基于 YAML.org refcard。
文档指标

:-:-%指令指标---文档标题...文档闭幕者 网络指标

  :-:-?关键指标:代价指标-嵌套系列条目指示器,单独的内联分支条目[]围绕串联系列分支{}围绕在线键控分支 别名指标

:-:-&锚属性*别名指示符 特殊键

:-:-=默认“值”映射键<<合并来自另一个映射的键 标量指标

:-:-''围绕内联未转义标量"围绕内嵌转义标量``>折叠标量指示器-剥离 chomp 修饰符(|- 或 >-)+保留 chomp 修饰符(|+ 或 >+)1-9显式缩进修饰符(|1 或 >2)。
修饰符可以组合(|2-, >+1) 标签属性(通常未指定)

  :-:-none未指定的标签(由应用步伐主动解析)!非特定标签(默认环境下,!!map/!!seq/!!str)!foo主要(按照惯例,表现本地 !foo 标志)!!foo次要的(按照惯例,表现 tag:yaml.org,2002:foo)!h!foo须要 %TAG !h! <prefix>(然后表现 <prefix>foo)!<foo>逐字标志(始终表现“foo”)  杂项指标

#一次性评论指示器`@两者都保留供将来利用 核心类型(默认主动标签)

  !!map{Hash table, dictionary, mapping}!!seq{List, array, tuple, vector, sequence}!!strUnicode 字符串 转义码

  Numeric



  • \x12 (8-bit)
  • \u1234 (16-bit)
  • \U00102030 (32-bit)
  Protective



  • \\ (\)
  • \" (")
  • \ ( )
  • \<TAB> (TAB)
  C



  • \0 (NUL)
  • \a (BEL)
  • \b (BS)
  • \f (FF)
  • \n (LF)
  • \r (CR)
  • \t (TAB)
  • \v (VTAB)
  额外的



  • \e (ESC)
  • \_ (NBSP)
  • \N (NEL)
  • \L (LS)
  • \P (PS)
更多类型

!!set{cherries, plums, apples}!!omap[one: 1, two: 2] 与语言无关的标量类型

  {~, null}空(无值)。[1234, 0x4D2, 02333][十进制整数、十六进制整数、八进制整数][1_230.15, 12.3015e+02][固定浮点数,指数浮点数][.inf, -.Inf, .NAN][无穷大(浮点数),负数,不是数字]{Y, true, Yes, ON}布尔真{n, FALSE, No, off}布尔假
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表