小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
设计目标
- YAML易于人类阅读。
- YAML数据可在编程语言之间移植。
- 适合描述程序所使用的数据结构,特别是脚本语言
- 丰富的表达能力与可扩展性
- YAML易于实现和使用。
YAML 和 XML 、JSON
YAML 和 JSON
区别
- JSON的首要设计目标是简单性和通用性。因此,JSON的生成和解析非常简单,但代价是人类可读性降低。
- YAML的首要设计目标是人类可读性。因此,YAML允许可读性强的文件,但是生成和解析起来更复杂。
联系
- JSON 是 YAML 的子集。
YAML 和 XML
- 尽管这两种语言实际上可能在多个应用程序领域竞争,但是它们之间没有直接关联。
- YAML 从 XML 中借鉴了很多,是综合 XML 和其他技术的成果。
基本语法
大小写敏感
示例:
- 我们定义了两个
testkey,
test:
h1: 1
test:
结果报如下错误:
duplicated mapping key at line 9, column -5:
test:
^
- 当我们把
test变成Test的时候,结果正常显示。
test:
h1: 1
Test:
转换成 JavaScript 格式如下:
test: { h1: 1 },
Test: null,
使用缩进表示层级关系
下面我们通过例子来演示什么是如何表达正确的层级关系:
- 两层:
test:
h1: 1
h2: 2
响应结果:
{ test: { h1: 1, h2: 2 }
- 三层
test:
h1:
h2: 2
转换成 JavaScript 格式如下:
{ test: { h1: { h2: 2 } }
- 错误的层级关系
test:
h1:
h2: 2
响应结果
bad indentation of a mapping entry at line 9, column 3:
h2: 2
缩进时不允许使用Tab键,只允许使用空格
当我们使用 Tab 键进行缩进时,会报如下错误:
bad indentation of a mapping entry at line 9, column 4:
h2: 2
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
上面例子说明,当元素左对齐的时候,就是同一层级的元素。
# 表示注释,从这个字符一直到行尾,都会被解析器忽略
test:
h1: 1 # 这个是注释
转换成 JavaScript 格式如下:
{ test: { h1: 1 })
字符串可以不用引号标注,如果字符串中包含空格或特殊字符,需要放在引号中
普通字符串不需要引号标注
test:
h1: 字符串
转换成 JavaScript 格式如下:
{ test: { h1: '字符串' }}
如果包含空格或特殊字符,需要放在引号之中。
test:
h1: '字符串1 字符串2'
转换成 JavaScript 格式如下:
{ test: { h1: '字符串1 字符串2' }}
单引号和双引号都可以使用,双引号不会对特殊字符进行转义。
test:
h1: '字符串\n字符串'
h2: "字符串\n字符串"
转换成 JavaScript 格式如下:
{ test: { h1: '字符串\n字符串', h2: '字符串\n字符串' })
字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
test:
h1: '这是一段
多行
字符串'
转为 JavaScript 如下。
{ test: { h1: '这是一段 多行 字符串' }}
多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行。
数据使用 - 表示
test:
- test1
- test2
- test3
转为 JavaScript 如下。
{ test: [ 'test1', 'test2', 'test3' ]}