正如YAML所表示的YAML Ain’t Markup Language,YAML /ˈjæməl/ 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

一边学习规则一边可以在在线Demo这个YAML转化JSON网页中进行上手练习

基本规则

YAML有以下基本规则: 
1、大小写敏感 
2、使用缩进表示层级关系 
3、禁止使用tab缩进,只能使用空格键 
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 
5、使用#表示注释,从这个字符一直到行尾,都会被解析器忽略。
6、字符串可以不用引号标注

三种数据结构

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

使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,示例:

# YAML表示
age : 12
name : huang # 对应的Json表示
{'age':12,'name':'huang'}

也可以将一个map写在一行:

# YAML表示
{age:12,name:huang} # 对应的Json表示
{'age':12,'name':'huang'}

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

使用连字符(-)表示:

# YAML表示
- a
- b
- 12 # 对应Json表示
['a','b',12]
 

也可以写在一行:

# YAML表示
[a,b,c] # 对应Json表示
[ 'a', 'b', 'c' ]

3、纯量(scalars):单个的、不可再分的值

数据结构嵌套

map和list的元素可以是另一个map或者list或者是纯量。由此出现4种常见的数据嵌套: 
1、map嵌套map

# YAML表示
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org # 对应Json表示
{ websites:
{ YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org' } }

2、map嵌套list

# YAML表示
languages:
- Ruby
- Perl
- Python
- c # 对应Json表示
{ languages: [ 'Ruby', 'Perl', 'Python', 'c' ] }

3、list嵌套list

# YAML表示
-
- Ruby
- Perl
- Python
-
- c
- c++
- java # 对应Json表示
[ [ 'Ruby', 'Perl', 'Python' ], [ 'c', 'c++', 'java' ] ]

除此以外,还可以如下表示该结构

# 方法2
- - Ruby
- Perl
- Python
- - c
- c++
- java # 方法3
- [Ruby,Perl,Python]
- [c,c++,java]

4、list嵌套map

# YAML表示
-
id: 1
name: huang
-
id: 2
name: liao # 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]

参考资料:http://www.ruanyifeng.com/blog/2016/07/yaml.html

 

YAML基本语法的更多相关文章

  1. YAML 语言语法

    发现很多开源的软件的配置文件都使用了这种语言来描述,据说是简单强大,很不巧,ansible也使用了这种语言来描述配置,学习ansible之前,先学习一下YAML语言. YAML基本语法规则如下: 大小 ...

  2. YAML(YML)语法详解

    ansible playbook是由yaml(yml)语法书写,结构清晰,可读性强,所以必须掌握yaml(yml)基础语法 语法 描述 锁进  YAML使用固定的缩进风格表示层级结构,每个缩进由两个空 ...

  3. springboot的yaml基础语法与取值,配置类,配置文件加载优先级

    1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...

  4. YAML基础语法

    正如YAML所表示的YAML Ain’t Markup Language,YAML 是一种简洁的非标记语言.YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读. 一边学习规则 ...

  5. ansible学习-playbook的YAML语法

    [一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...

  6. SpringBoot-03-配置之yaml语法学习

    3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...

  7. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  8. YAML 技术研究

    YAML预研文档 YAML概要 YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:" ...

  9. python yaml使用

    YAML Ain't Markup Language 和GNU一样,YAML是一个递归着说“不”的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是X ...

随机推荐

  1. wpf-x-指令元素

    1. x:Code 用于代码前置  可以吧 C#代码内嵌到前端里 2. x:XData 用于内嵌xml 文件

  2. Linux 查看端口被什么程序占用

    lsof -i:8899 输出: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEjava 38889 root 329u IPv6 5883661 ...

  3. 学c++需要先学c语言吗?

    看你的需求,如果是底层开发,就必须学习C语言.如果只是应用开发,可以直接从C++开始学习.实际上这两个语言是平等的,只是在语法上C++尽量与C兼容,但仍然有很多不同的地方. 1) C++不是C的超集. ...

  4. linux samba smb 在客户端无法连接使用

    netstat -nutlp查看是否启动进程 1.网络是否正常,是否可以ping通.2.Windows和Linux的防火墙全部关闭.3.samba的端口是否开启,tcp/139.tcp/445.udp ...

  5. day01计算机基础

    今日内容 1.计算机初步认识 1.计算机认识 1. 计算机基础 1.1硬件:cpu/内存/硬盘/主板/网卡 1.2操作系统 linux:免费开源 windows mac 1.3解释器/编译器 补充:编 ...

  6. python 进程之间的数据共享

    from multiprocessing import Process,Manager import os def f(d,n): d[os.getpid()] = os.getppid()#对字典d ...

  7. 使用Blend设计出符合效果的WPF界面

    之前不会用blend,感觉好难的,但美工给出的效果自己有没办法实现,所以研究了一下blend,感觉没有想象中的那么难 废话不多说,开始界面设计 今天拿到美工给的一个界面效果图 这个界面说实话,还可以吧 ...

  8. python 0,1行列问题

    shape[0]-- 行 A.min(0) --A的按列最小值,生成一个行向量 >>> a = np.random.rand(3,3) >>> a array([[ ...

  9. Head First 设计模式 (Eric Freeman / Elisabeth Freeman / Kathy Sierra / Bert Bates 著)

    1. 欢迎来到设计模式世界:设计模式入门 (已看) 策略模式 定义了算法族,分别分装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 设计原则 找出应用中可能需要变化之处,把它们 ...

  10. c# automapper 使用(一)

    一.最简单的用法 有两个类User和UserDto public class User { public int Id { get; set; } public string Name { get; ...