摄影:产品经理与产品经理在家里的美好时光
GNE 使用 YAML 格式来编写配置文件。
业界常常流传一个笑话,写 YAML 配置的时候,需要用游标卡尺比着屏幕来写。稍稍多一个空格少一个空格,配置文件就会报错。
我们通过 JSON 来做对比,快速学习 YAML 的语法。
注意,同一个意思,用 YAML 可能有多种写法,为了让大家快速掌握,我们只选择一种来介绍。
YAML 与 Python 一样,对缩进敏感,所以大家在写 YAML 时一定要注意缩进。并且 YAML 的缩进只能使用空格,不能使用 Tab。
一对一
对于 JSON 字符串:
{"name": "kingname", "salary": 99999, "address": "杭州"}
对应的 YAML 为:
name:kingname salary:99999 address:杭州
YAML 格式不需要大括号、不需要引号。比 JSON 简洁不少。
数组
对于 JSON 字符串:
["kingname", "产品经理", "天下第一"]
对应的 YAML 为:
-kingname -产品经理 -天下第一
Yaml 的列表是以-
开头,并且-
与正文之间有一个空格。
字典嵌套
对于 JSON 字符串:
{"info": {"basic_info": {"name": "kingname", "age": 27}, "other_info": {"address": "杭州", "salary": 99999.0}}}
对应的 YAML 为:
info: basic_info: name:kingname age:27 other_info: address:杭州 salary:99999.0
列表嵌套
对于 JSON 字符串:
{"skill": ["Python", "Golang", "Java"]}
对应的 YAML 为:
skill: -Python -Golang -Java
由于列表["Python", "Golang", "Java"]
是skill
的值,所以他们会存在缩进。YAML 的缩进用几个空格都可以,只要每一项保持一致就行。但由于我经常写 Python,所以习惯使用4个空格作为缩进。
注释
YAML 的注释与 Python 一样,使用#
号。
# 以下是基本信息 name:kingname age:27 # 以下是高级信息 salary:99999 single:false password:1234567
兼容性
YAML 是 JSON 的超集,所以解析 YAML 的程序也能正常解析 JSON 格式。
在 Python 中,我们使用 pyyaml 来解析 Yaml 格式的字符串。安装方式如下:
pip install pyyaml
安装完成以后,使用如下命令解析 YAML:
import yaml config = ''' title: xpath: //title/text() host: https://www.xxx.com noise_node_list: - //div[@class="comment-list"] - //*[@style="display:none"] - //*[@class="contheight"] with_body_html: false ''' config_dict = yaml.safe_load(config)
运行效果如下图所示:
这个配置文件我们可以直接改成 JSON,效果如下图所示:
可以看出,实现相同的效果,用 JSON 要写很多的中括号大括号双引号,还要考虑反斜杠的问题。
但使用 YAML,这些问题统统不是问题,可读性高得多。