YAML = YAML Ain’t a Markup Language
一种非标记语言
通用的数据串行化格式,方便人类的读写。
Yaml 与 XML
- Yaml: data-orinted
- XML: document markup
Yaml 适用范围
- 脚本语言中使用(解析成本低)
- 配置文件
Yaml 特点
- 无自己的数据类型定义,使用实现语言的数据类型
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 使用#表示注释
- 字符串可以不用引号标注
数据结构
1. map — 哈希表
键值对(Key : Value)
同一缩进的所有键值对属于同一个map
# YAML 表示1
age : 25
name : Seven
# YAML 表示2
{age : 25, name : Seven}
# JSON表示
{'age' : 25, 'name' : 'Seven'}
2. list — 列表
连字符(-)
# YAML 表示1
- a
- b
- 17
# YAML 表示2
[a, b, 17]
# JSON 表示
['a', 'b', 17]
3. scalar — 纯量
数据最小的单位,不可以再分割。
4. map 与 list 嵌套
map和list的元素可以是另一个map或者list或者scalar。
4种常见的数据嵌套。
(1)map in 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)list in map
# YAML 表示
language:
- YAML
- Ruby
- Python
- Perl
# JSON 表示
{ language : ['YAML', 'Ruby', 'Python', 'Perl']}
(3)list in list
# YAML 表示1
-
- Ruby
- Perl
- Python
-
- C
- C++
- Java
# YAML 表示2
- - Ruby
- Perl
- Python
- - C
- C++
- Java
# YAML 表示3
- [Ruby, Perl, Python]
- [C, C++, Java]
# JSON 表示
[ [ 'Ruby', 'Perl', 'Python' ], [ 'C', 'C++', 'java' ] ]
(4)map in list
# YAML 表示
-
id : 1
name : a
-
id : 2
name : b
# JSON 表示
[ { id : 1, name : 'a' }, { id : 2, name : 'b' } ]