6.11.1. yaml笔记
yaml标准文档 https://yaml.org/spec/1.2.2/
YAML是 YAML Ain't Markup Lanuage
的缩略词
YAML是一种非常简单的基于文本的人类可读的语言内,用于数据交换
YAML不是一种编程语言,它主要用于存储配置信息
YAML减少了JSON和XML文件中大部分”噪音”格式,如引号,方括号,大括号
YAML区分大小写,不允许使用制表符TAB键,遵循严格缩进
6.11.1.1. 基础语法
6.11.1.1.1. 键对值
<key>: <value>
其中<key>代表名称,<value>代表数据,之间用分割: (空格是必须的)
name: hkdywg
age: 30
对应的JSON描述为:
{
"name": "hkdywg"
"age": 30
}
6.11.1.1.2. 列表
列表通过在其项目前加上 -
(连字符)来表示
number:
- one
- two
- three
这个列表是包含在对象里面的,如果我们想要如下JSON列表的表述呢
[
{
"name": "hkdywg"
"age": 30
},
{
"name": "tester"
"age": 18
}
]
对应的YAML可以这样写
-
name: hkdywg
age: 30
-
name: tester
age: 18
6.11.1.1.3. 注释
# 这是一行注释
注解
YAML不支持块或者多行注释
6.11.1.2. YAML中的类型
YAML支持的数据类型列表如下:
Boolean
Numbers
Strings
Arrays
Maps
Null
Dates
Timestamp
dataType:
string: "YAML"
interger: 123
float: 12.345
boolean: true
注解
根据YAML 1.2规范文档,”yes”和”no”不再被解释为布尔值
6.11.1.2.1. 字符串(string)
字符串可以加单引号或双引号或没有引号
quoted:
- 'single quoted string'
- "double quoted strings"
- without quoted string
6.11.1.2.2. 单行/多行文本
涉及字符串还有一个问题,当字符串比较多的时候,为了更好的展示,可以选择单行/多行文本展示
# Multiline strings start with |
execute: |
sudo apt -y install libcurl
sudo apt install -y tftp-hpa tftpd-hpa
sudo sed -i 's/TFTP_DIRECTORY="\/var\/lib\/tftpboot"/TFTP_DIRECTORY="\/home\/tftp"/' /etc/de
# Single strings start with >
single-line-string: >
this
should
be
one
line
注解
当使用 >
字符而不是 |
,每一个新行都将被解释为一个空格
6.11.1.2.3. 数值(Number)
数值有整数,小数,整数,负数,正无穷大,NaN(not a number),科学计数法,进制表示
interger: 12
decimal: 0.5
positive: +12
negative: -12
positive infinity: .inf
negative infinity: -.inf
not a number: .nan
number: 687_456
scientific counting method: 2.3e4
binary: 0b101010
6.11.1.2.4. 空值(null)
YAML声明空值有以下几种方法
manager: null
blank:
tilde: ~
title: null
~: null key
6.11.1.2.5. 时间戳(timestamp)
时间戳表示单个时间点,它使用符号形式ISO8601.如果未添加时区,则假定该时区为UTC.要描述日期格式,可以省略时间部分
time: 2023-03-17T01:13:58:35.02Z
timestamp: 2023-03-17T01:13:58:35.02 +05:30
datetime: 2023-03-17T01:13:58:35.02+05:30
notimezone: 2023-03-17T01:13:58:35.02
date: 2023-03-17
6.11.1.2.6. 显示类型
默认情况下,YAML会自动推断数据类型,必要时也可以使用标签(tags)显示指定类型,比如整数类型两个英文感叹号 !!
再加上int就变成了一个整数tag
should-be-int: !!int 3.2
should-be-string: !!str 30.25
should-be-boolean: !!bool true
tags |
description |
!!int |
interger |
!!float |
float |
!!str |
string |
!!bool |
boolean |
!!null |
null |
!!seq |
array |
!!map |
map |
!!set |
set |
!!omap |
order map |
!!pairs |
pairs |
6.11.1.3. 高级功能
6.11.1.3.1. 代码复用
任何代码都讲究个复用,最基本的就是定义变量,但YAML无法定义变量,YAML通过Node Anchors来解决
#复用Value的值
First occurrence: &anchor Value
Second occurrence: *anchor
通过 &
标记一个节点,使用 *
字符引用它,从而达到复用
6.11.1.3.2. 块样式和流样式
块样式
在文档块样式使用块用于结构化文档,它更容易阅读,但不那么紧凑
color:
- red
- grene
- blue
流样式
YAML有一种称为flow style的替代语法,它允许在不依赖缩进的情况下内联编写序列和映射,分别使用一对方括号和大括号
color: [red, blue]
#或
- { name: "hkdywg", age: 30 }