一个计算机技术爱好者与学习者

0%

YAML语言

1. YAML语言简介

YAML (/ˈjæməl/ and YAH-ml) is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Extensible Markup Language (XML) but has a minimal syntax which intentionally differs from SGML. It uses both Python-style indentation to indicate nesting, and a more compact format that uses […] for lists and {…} for maps thus JSON files are valid YAML.

参考文档:

下文主要转载自阮一峰大佬的YAML 语言教程

2. YAML基本语法

YAML基本语法规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML数据结构:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

3. YAML和JSON

YAML和JSON可以互相转换。网上有很多工具:

如果有python3环境,还可以使用python-json2yaml工具。

1
2
3
4
pip install PyYAML==5.1
pip install python-json2yaml
cat a.json | json2yaml > a.yaml
cat a.yaml | yaml2json

4. 对象

对象的一组键值对,使用冒号结构表示。

1
animal: pets

YAML 也允许另一种写法,将所有键值对写成一个行内对象。

1
hash: { name: Steve, foo: bar } 

5. 数组

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

1
2
3
4
animals:
- Cat
- Dog
- Goldfish

数组也可以采用行内表示法。

1
animals: [Cat, Dog, Goldfish]

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

1
2
3
4
5
animals:
-
- Cat
- Dog
- Goldfish

6. 复合结构

对象和数组可以结合使用,形成复合结构。

1
2
3
4
5
6
7
8
9
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org

7. 纯量

纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量。

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

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

1
number: 12.30

布尔值用true和false表示。

1
isSet: true

null用~表示。

1
parent: ~ 

时间采用 ISO8601 格式。

1
iso8601: 2001-12-14t21:59:43.10-05:00

日期采用复合 iso8601 格式的年、月、日表示。

1
date: 1976-07-31

YAML 允许使用两个感叹号,强制转换数据类型。

1
2
e: !!str 123
f: !!str true

8. 字符串

字符串是最常见,也是最复杂的一种数据类型。

字符串默认不使用引号表示。

1
str: 这是一行字符串

如果字符串之中包含空格或特殊字符,需要放在引号之中。

1
str: '内容: 字符串'

单引号和双引号都可以使用,双引号不会对特殊字符转义。

1
2
s1: '内容\n字符串'
s2: "内容\n字符串"

单引号之中如果还有单引号,必须连续使用两个单引号转义。

1
str: 'labor''s day' 

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

1
2
3
str: 这是一段
多行
字符串

多行字符串可以使用|保留换行符,也可以使用>折叠换行。

1
2
3
4
5
6
this: |
Foo
Bar
that: >
Foo
Bar

+表示保留文字块末尾的换行,-表示删除字符串末尾的换行。

1
2
3
4
5
6
7
8
9
s1: |
Foo

s2: |+
Foo


s3: |-
Foo

字符串之中可以插入 HTML 标记。

1
2
3
4
5
message: |

<p style="color: red">
段落
</p>

9. 引用

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

1
2
3
4
5
6
7
8
9
10
11
defaults: &defaults
adapter: postgres
host: localhost

development:
database: myapp_development
<<: *defaults

test:
database: myapp_test
<<: *defaults

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。
等同于下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
defaults:
adapter: postgres
host: localhost

development:
database: myapp_development
adapter: postgres
host: localhost

test:
database: myapp_test
adapter: postgres
host: localhost

下面是另一个例子。

1
2
3
4
5
- &showell Steve 
- Clark
- Brian
- Oren
- *showell

10. YAML特殊符号说明

  • | :管道符/竖线,保留文本块中的换行符。
  • |+ :保留文本块中的换行符。等价于|
  • |- :保留文本块中的换行符。删除最后一行的换行符。
  • > :大于号,文本块中的换行替换为空格。保留最后一行的换行符。
  • >+ :文本块中的换行替换为空格。等价于>
  • >- :文本块中的换行替换为空格。删除最后一行的换行符。
  • |2 :缩进指示符。通常,用于缩进块的空格数将从第一行自动猜测。如果块的第一行以空格开头,可能需要块缩进指示器。在这种情况下,需要指定用于缩进的空格数(1 到 9 之间)。
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-yaml/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~