1、YAML基本概念

1.1 简介

设计目标:方便读写

用处:专门用来写配置文件的语言,一种通用的数据串行化格式

1.2 基本语法

大小写敏感

使用缩进表示层级关系

缩进时不允许使用Tab键,只允许使用空格。

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

“#” 表示注释,从这个字符一直到行尾,都会被解析器忽略

1.3 支持的数据结构:

字典:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 对象

数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

纯量(scalars):单个的、不可再分的值,即基本数据类型

1.4 注意点

重复定义时,后定义的会覆盖前面定义的值

如果值为 int, float, bool等类型,解析后会转换为对应的类型

2、数据结构

2.1 字典

键值对,使用冒号结构表示。


# {k1: v1}
hash:
k1: v1
k2: true
k3: 1
k4: 1.0001 # or
# { k1:v1, k2:v2 }, k: v 间的空格不能省略
hash: { k1: v1, k2: true, k3: 1, k4: 1.0001 }

2.2 数组

一组连词线开头的行,构成一个数组。


# ['Cat', 'Dog', 'Goldfish']
listname
- Cat
- Dog
- Goldfish

如果数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。


# [# ['Cat', 'Dog', 'Goldfish'], ]
listname
-
- Cat
- Dog
- Goldfish

行内表示法


# { animal: [ 'Cat', 'Dog' ] }
animal: [Cat, Dog]

2.3 纯量

纯量是最基本的、不可再分的值。

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

表现形式:

数值类,直接以字面量的形式表示


# num: 12.30
num: 12.30

布尔,true 和 false 表示


# {flag: true}
flag: true

null 用~表示


# {parent: null}
parent: ~

时间,采用ISO8601格式


# { iso8601: new Date('2001-12-14t21:59:43.10-05:00') }
iso8601: 2001-12-14t21:59:43.10-05:00

日期


# { date: new Date('1976-07-31') }
date: 1976-07-31

2.4 强制类型转换,双!


# { e: '123', f: 'true' }
e: !!str 123
f: !!str true

2.5 字符串


# { str: '这是一行字符串' }
str: 这是一行字符串 # 字符串之中包含空格或特殊字符,需要放在引号之中
# { str: '内容: 字符串' }
str: '内容: 字符串' # 单引号和双引号都可以使用,双引号不会对特殊字符转义
# { s1: '内容\\n字符串', s2: '内容\n字符串' }
s1: '内容\n字符串'
s2: "内容\n字符串" # 单引号之中如果还有单引号,必须连续使用两个单引号转义
# { str: 'labor\'s day' }
str: 'labor''s day' # 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
# { str: '这是一段 多行 字符串' }
str: 这是一段
多行
字符串 # 多行字符串可以使用|保留换行符,也可以使用>折叠换行
# { this: 'Foo\nBar\n', that: 'Foo Bar\n' }
this: |
Foo
Bar
that: >
Foo
Bar # +表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
# { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
s1: |
Foo
s2: |+
Foo
s3: |-
Foo

3、引用

锚点&和别名*,可以用来引用。

  • &用来建立锚点,类似于声明变量
  • *用来引用锚点,类似于引用变量
  • <<表示合并到当前数据(如果变量名重复也会覆盖)

# example, 文件名为test2.yml
var: &var 111 tag1: &tag1
- *var
- m2
# 等价于
#tag1: &tag1
# - 111
# - m2 tag2:
- *tag1
- *var
- m3
- m4
# 等价于
#tag2:
# - [111, m2]
# - 111
# - m3
# - m4 redis: &redis
r_host: redis_host
r_port: redis_port mysql: &mysql
m_host: mysql_host
m_port: mysql_port dev1:
<<: *redis
<<: *mysql
# 等价于
#dev1:
# r_host: redis_host
# r_port: redis_port
# m_host: mysql_host
# m_port: mysql_port dev2:
redis: *redis
mysql: *mysql
# 等价于
#dev2:
# redis: { r_host: redis_host, r_port: redis_port }
# mysql: { m_host: mysql_host, m_port: mysql_port }

4、学习链接

阮一峰YAML 语言教程

YAML 在线damo

YAML、YML在线编辑器(格式化校验)

学习笔记:yaml语言教程的更多相关文章

  1. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  2. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  3. 转: YAML 语言教程 from(阮一峰)

    YAML 语言教程 from: http://www.ruanyifeng.com/blog/2016/07/yaml.html

  4. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  5. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  6. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  7. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程

    转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...

  8. YAML 语言教程(转载)

    用YAML语言读取配置是最快的,之前的suricata中用yaml读取了配置,并且在代码运行期间,对配置进行了维护,所以抽点时间,来了解一下YAML语言编程,下文虽然对YAML语言和JAVAScrip ...

  9. YAML 语言教程与使用案例

    YAML语言教程与使用案例,如何编与读懂写YAML文件. YAML概要 YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写.在开发的这种 ...

随机推荐

  1. Chinese Mahjong

    OJ题号:UVa11210 思路: 首先字符串处理读入手牌,str数组将手牌和数字对应,接下来搜索,先搜对子,如果搜过对子就不搜了.由于对子有且只有一个,可以在搜到以后直接跳出.同时注意一副麻将中每种 ...

  2. 零基础Python入门(1)- python安装与预热

    大家好,我是jacky,很高兴跟大家分享<Python数据科学之金融行业实操>,今天带大家学习我们这门课的操作工具,就是Python,为什么选用Python来作为金融行业数据科学的工具呢? ...

  3. Python数据结构学习

    列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. 以下是 Python 中列表的方法: 方法 描述 list.append(x ...

  4. ansible user模块

    查看模块的功能和选项,使用ansible-doc命令 ansible-doc options: -l #查看所有可用的模块 -m #查看模块的路径 -v #查看版本 -t TYPE #查看插件,插件: ...

  5. [APIO2015]八邻旁之桥——非旋转treap

    题目链接: [APIO2015]八邻旁之桥 对于$k=1$的情况: 对于起点和终点在同侧的直接计入答案:对于不在同侧的,可以发现答案就是所有点坐标与桥坐标的差之和+起点与终点不在同一侧的人数. 将所有 ...

  6. buoyantSimpleFoam求解器:恒热流壁面【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/148183-buoyantsimplefoam-fixed ...

  7. javascript创建对象的几种方式?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 person={ firstname:" ...

  8. python arcgis

  9. sqlServer sa账号被锁定

    alter login sa with password = '123'  unlock, check_policy = off, check_expiration = off    一切搞定.. 1 ...

  10. 如何git revert merge commit?

    答: git revert -m <parent-number> <commit-id> (适用于merge操作的commit) 参考资料: https://blog.csdn ...