导图社区 YAML
yaml基础语法简介,包括基本语法、数据类型、对象、数组、符合结构、纯量、引用等等。
编辑于2022-11-23 10:05:15 浙江省YAML
YAML是一门标记语言,结构类似json,语法和json不同,但是可以通过第三方工具进行结构互转,按照书写方式,应当是比json更简洁,更方便。 后缀为.yml 在docker中由于docker compose时记录环境内的应用程序,便于一次性安装 参考地址: https://www.runoob.com/w3cnote/yaml-intro.html https://www.ruanyifeng.com/blog/2016/07/yaml.html https://www.jianshu.com/p/97222440cd08 https://daihainidewo.github.io/blog/yaml%E6%95%99%E7%A8%8B/
基本语法
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
'#'表示注释
数据类型
对象
键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组
一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars)
单个的、不可再分的值
YAML 对象
对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
可以使用 key: {key1: value1, key2: value2, ...}
key: child-key: value child-key2: value2
YAML 数组
以 - 开头的行表示构成一个数组
- A - B - C
转为json格式,如下: ```json [ "A", "B", "C" ] ```
YAML 支持多维数组,可以使用行内表示
key: [value1, value2, ...]
转为json格式如下: ```json { "key": [ "value1", "value2" ] } ```
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
- - A - B - C
转为json格式,如下: ```json [ [ "A", "B", "C" ] ] ```
companies: - id: 1 name: company1 price: 200W - id: 2 name: company2 price: 500W
转化为yaml的flow流式结构表示为: ```yaml companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}] ``` 转化为json ```json { "companies": [ { "id": 1, "name": "company1", "price": "200W" }, { "id": 2, "name": "company2", "price": "500W" } ] } ```
复合结构
数组和对象可以构成复合结构
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
转化为json: ```json { languages: [ 'Ruby', 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } } ```
纯量
纯量是最基本的,不可再分的值
字符串
string: - 哈哈 - 'Hello world' #可以使用双引号或者单引号包裹特殊字符 - newline newline2 #字符串可以拆成多行,每一行会被转化成一个空格
布尔值
boolean: - TRUE #true,True都可以 - FALSE #false,False都可以
整数
int: - 123 - 0b1010_0111_0100_1010_1110 #二进制表示
浮点数
float: - 3.14 - 6.8523015e+5 #可以使用科学计数法
Null
null: nodeName: 'node' parent: ~ #使用~表示null
时间
datetime: - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
日期
date: - 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
引用
& 锚点和 * 别名,可以用来引用
& 用来建立锚点(defaults)
<< 表示合并到当前数据
* 用来引用锚点
示例
defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults
转化为不用引用的yaml结构为: ```yaml defaults: adapter: postgres host: localhost development: database: myapp_development adapter: postgres host: localhost test: database: myapp_test adapter: postgres host: localhost ``` 转化为json: ```json { "defaults": { "adapter": "postgres", "host": "localhost" }, "development": { "database": "myapp_development", "adapter": "postgres", "host": "localhost" }, "test": { "database": "myapp_test", "adapter": "postgres", "host": "localhost" } } ```
- &showell Steve - Clark - Brian - Oren - *showell
转化为json: ```json [ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ] ```