目标:不排斥 yaml 语法。争取快速上手

简介:

请添加图片描述
导读

这三年,除了 Makefile,我就没碰过这么怪的语法。当然 Makefile 我是果断放弃了,因为我会写 CMake 嘿嘿。

怪也得上手啊,马上就要用的东西了。先通读一下语法吧,反正不多,一会儿拿 Python 来演示一下可能会感觉世界都明朗了吧(不得不说,Python 真是个好东西)
yaml ?

脚本语言。
写配置文件用的。
后缀为 .yml。
玩 docker、k8s 肯定是逃不掉这个了。

yaml 基础语法

1、大小写敏感。
2、使用缩进表示层级关系,空格数不重要,同一层级一致即可。
3、缩进不允许使用 tab,只能空格。
4、# 表注释。

yaml 数据类型

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

我受不了了,我们打开 python 的编辑器。

pip install pyyaml

1

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

也可以使用 key:{key1: value1, key2: value2, …}。

还可以使用缩进表示层级关系;

key:

child-key: value
child-key2: value2

1
2
3

我们用 Python 来转化一下:

import yaml

f = open("yaml1.yaml")

res = yaml.safe_load(f)

print(res)

1
2
3
4
5
6
7
8

/yaml_test/main.py

{'key': {'child-key': 'value', 'child-key2': 'value2'}}

Process finished with exit code 0

1
2
3
4
5
6

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

?

- complexkey1
- complexkey2

:

- complexvalue1
- complexvalue2

1
2
3
4
5
6

意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

(教程里的,但是 Python 转化不出来,所以我不确定。但是我也是第一次接触,所以就只能把话放这儿了。)
数组

以 - 开头的行表示构成一个数组:

  • A
  • B
  • C

    1
    2
    3

/yaml_test/main.py
['A', 'B', 'C']

Process finished with exit code 0

1
2
3
4

YAML 支持多维数组,可以使用行内表示:

key: [value1, value2, …]

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

-

  • A
  • B
  • C

    1
    2
    3
    4

yaml_test/main.py
[['A', 'B', 'C']]

Process finished with exit code 0

1
2
3
4

一个相对复杂的例子:

companies:

-
    id: 1
    name: company1
    price: 200W
-
    id: 2
    name: company2
    price: 500W

1
2
3
4
5
6
7
8
9

/yaml_test/main.py
{'companies': [{'id': 1, 'name': 'company1', 'price': '200W'}, {'id': 2, 'name': 'company2', 'price': '500W'}]}

Process finished with exit code 0

1
2
3
4

意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成的对象。

数组也可以使用流式(flow)的方式表示:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

1

(直接这么写不好吗?是我肤浅了吧)
复合结构

数组和对象可以构成复合结构,例:

languages:

  • Ruby
  • Perl
  • Python

websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org

1
2
3
4
5
6
7
8
9

转换为 json 为:

这个我就不放出来了,可以自己看。
纯量

纯量是最基本的,不可再分的值,包括:

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

1
2
3
4
5
6
7

使用一个例子来快速了解纯量的基本使用:

boolean:

- TRUE  #true,True都可以
- FALSE  #false,False都可以

1
2
3

float:

- 3.14
- 6.8523015e+5  #可以使用科学计数法

1
2
3

int:

- 123
- 0b1010_0111_0100_1010_1110    #二进制表示

1
2
3

null:

nodeName: 'null'
parent: ~  # 使用~表示null

显示出来是 None

1
2
3
4

string:

- 哈哈
- 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
- newline
  newline2    #字符串可以拆成多行,每一行会被转化成一个空格

1
2
3
4
5

yaml_test/main.py
{'string': ['哈哈', 'Hello world', 'newline newline2']}

Process finished with exit code 0

1
2
3
4

date:

- 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd

datetime:

- 2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

1
2
3
4

yaml_test/main.py
{'date': [datetime.date(2018, 2, 17)], 'datetime': [datetime.datetime(2018, 2, 17, 15, 2, 31, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))]}

Process finished with exit code 0

1
2
3
4

引用

(这一部分在我操作 k8s 的这段时间里是还没遇到过)

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

defaults: &defaults
adapter: postgres
host: localhost

development:
database: myapp_development
<<: *defaults

test:
database: myapp_test
<<: *defaults

1
2
3
4
5
6
7
8
9
10
11

相当于:

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
6
7
8
9
10
11
12
13

yaml_test/main.py
{'defaults': {'adapter': 'postgres', 'host': 'localhost'}, 'development': {'adapter': 'postgres', 'host': 'localhost', 'database': 'myapp_development'}, 'test': {'adapter': 'postgres', 'host': 'localhost', 'database': 'myapp_test'}}

Process finished with exit code 0

1
2
3
4

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。

下面是另一个例子:

  • &showell Steve
  • Clark
  • Brian
  • Oren
  • *showell

    1
    2
    3
    4
    5

转为 Json 代码如下:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

1

那这样呢?:

-

  • &showell Steve

-

  • Clark

-

  • Brian

-

  • Oren

-

  • *showell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

小 tips:
如果 JSON 过长,可以打成 .json 文件拖到火狐下看。
————————————————
版权声明:本文为CSDN博主「看,未来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43762191/article/details/125655727

相关文章
|
8月前
|
XML C语言 数据格式
yaml基本语法
yaml基本语法
95 0
|
8月前
|
XML Java 数据格式
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
747 0
|
4月前
|
XML Java C语言
yaml语法格式,springboot中yaml的使用
本文介绍了YAML的语法格式和数据类型表示方法,并详细讲解了如何在Spring Boot中使用YAML,包括@ConfigurationProperties注解及Bean的创建、编写Controller、配置application.yaml配置文件,以及在pom.xml中开启YAML提示。
|
8月前
|
存储 前端开发 IDE
YAML语法记录
YAML语法记录
135 0
|
7月前
|
敏捷开发 缓存 安全
阿里云云效产品使用问题之手动触发流水线的YAML语法该怎么写
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
7月前
|
XML 数据格式
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
|
8月前
|
Java 数据格式 Spring
详解YAML语法及占位符语法
设计了一个YAML数据结构来表示家庭信息,包括家庭名、父亲、母亲和孩子。父亲有名字和年龄,母亲有别名,孩子有名字、年龄和朋友列表,每个朋友有爱好和性别。字符串可以用单引号或双引号,双引号会转义特殊字符。YAML支持松散的键绑定。Spring Boot配置文件中,占位符可用于设置随机数,如${random.int},并可提供默认值,如${family.father.name:zimug}。
282 0
|
8月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
720 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
|
XML 运维 Java
SpringBoot中Yaml语法和JSR303数据校验《第三课》
SpringBoot中Yaml语法和JSR303数据校验《第三课》
195 0
|
XML JSON 数据格式
yaml语法
yaml语法

相关实验场景

更多