yaml使用

本文深入探讨了YAML配置文件的使用,包括其基本语法、数据结构如对象、数组和标量,以及特殊符号的使用。同时介绍了如何通过锚点和别名避免代码重复,并提供了读取YAML配置文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

yaml简介

最近看代码,觉得大的工程都会使用单独使用配置文件,进行变量的声明和配置,而很多都是以yaml文件的形式保存。yaml是一种非常灵活的格式,几乎是json的超集。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。

yaml语法规则

基本规则:

  • 大小写敏感
  • 使用缩紧表示层级关系; 例如key:(空格)value,表示一个键值对,空格不可以省略。
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩紧的空格树木不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略

yaml的数据结构

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

对于对象,格式为:
Map(属性和值)(键值对)的形式

key:(空格)value表示一个键值对,空格不可以省略。例如下面的

 person:
   name: vivi
   age: 18

一行写法:
person:{name: vivi,age: 18}
读取后相当于json格式:

{"name":"vivi","age":18}


数组

一组连词线开头的行,构成一个数组。数组前加有 “-” 符号,符号与值之间需用空格分隔。

color:

  • red
  • blue
  • green
    一行写法:
    color: [red,blue,green]
    相当于JSON:

[“red”,“blue”,“green”]

纯量

单个的、不可再分的值。(如:字符串、bool值、整数、浮点数、时间、日期、null等)

n1: 8
n2: 8.8
n3: true
n4: false
n5: ‘vivi’

特殊符号

null使用~表示
例如:
parent: ~
表示为:

{ parent: null }

YAML 允许使用两个感叹号,强制转换数据类型。
例如:
e: !!str 123
f: !!str true
表示为:


{ e: '123', f: 'true' }

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

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

等同于下面的代码

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

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

  • &showell Steve
  • Clark
  • Brian
  • Oren
  • *showell
    表示为
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

yaml配置文件读取

参考:http://www.ruanyifeng.com/blog/2016/07/yaml.html

YAML是一种用于配置文件的格式,而JSONPath是一种用于从JSON数据中提取特定值的查询语言。虽然YAML本身不直接支持JSONPath,但是可以通过在代码中使用第三方库或工具来实现从YAML文件中提取数据的功能。 在Python中,可以使用PyYAML库来读取和解析YAML文件。然后,可以使用jsonpath-ng库来使用JSONPath语法从YAML中提取数据。 首先,我们需要安装这两个库: ``` pip install pyyaml pip install jsonpath-ng ``` 接下来,我们可以编写代码来读取YAML文件并使用JSONPath提取数据。下面是一个简单的例子: ```python import yaml from jsonpath_ng import jsonpath, parse # 读取YAML文件 with open('data.yaml', 'r') as file: yaml_data = yaml.safe_load(file) # 设置要提取的JSONPath表达式 expression = parse('$.users[*].name') # 在YAML数据上执行JSONPath查询 matches = [match.value for match in jsonpath(yaml_data, expression)] # 输出提取到的数据 print(matches) ``` 在上面的代码中,我们首先使用`yaml.safe_load()`函数将YAML文件中的数据加载到Python对象中。然后,使用`parse()`函数将我们想要的JSONPath表达式解析为一个查询对象。接下来,使用`jsonpath()`函数在YAML数据上执行查询。最后,我们使用一个循环将查询结果中的匹配项提取出来,并将其打印出来。 通过这种方法,我们可以使用JSONPath语法从YAML文件中提取我们感兴趣的数据。需要注意的是,JSONPath语法与XPath和CSS选择器等其他查询语言之间有些许差异,因此在编写查询表达式时需要参考JSONPath的语法规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值