yaml文件

一、yaml文件概述

YAML(YAML Ain't Markup Language)是一种人类友好的数据序列化格式,用于表示数据结构和配置文件。以下是 YAML 文件的一些概述信息:

  1. 可读性强:YAML 使用缩进和结构化方式来表示数据,易于阅读和编写。它注重易读性,鼓励使用人类可读的格式。

  2. 轻量级:YAML 是一种轻量级的标记语言,相对于 XML 和 JSON,它更简洁、易理解,适合表示复杂的数据结构。

  3. 支持数据类型:YAML 支持常见的数据类型,如字符串、整数、浮点数、布尔值、列表和对象(映射),可以灵活地表示各种数据结构。

  4. 扩展性:YAML 具有很强的扩展性,可以通过自定义标签和类型来扩展其功能,满足不同应用场景的需求。

  5. 用途广泛:YAML 文件常用于配置文件、数据传输、API 接口定义、服务器管理和版本控制等领域,易于与各种编程语言和工具进行集成和解析。

二、yaml基础语法

重点:yaml文件对空格要求极其严格!!!

2、1 字符串、数字、布尔值

字符串默认不用加引号,如果需要有转译的就需要加,不过需要注意双引号和单引号的区别。

""双引号:不会转义特殊意义的字符,最终以需要表达的特殊意义输出,例如\t、\n

hello: "Hello \n Word!!!"  #输出 Hello 换行 Word!!!

''单引号:会把特殊字符转义,最终以普通字符的形式输出

hello: 'Hello \n Word!!!'  #输出 Hello \n Word!!!

字符串是代表句子或短语的字符的集合。您可以使用|将每个字符串打印为新行,>可以将其打印为段落。

str: Hello World
data: |
   These
   Newlines
   Are broken up
data: >
   This text is
   wrapped and is a
   single paragraph

输出为:

[{'str': 'Hello World', 'data': 'These\nNewlines\nAre broken up\n', 'data2': 'This text is wrapped and is a single paragraph\n'}]

注意,此方法最后一行末尾换行符会被识别

还可以用+和-来选择是否保留文字块末尾的换行符

s1: |
  Foo
s2: |+
  Foo
s3: |-
  Foo

2、2 对象、Map(键值对)

存放对象有两种方式

第一层写对象名称,对象名称下面写属性名称,一定要注意缩进

​ 对象的属性名称要在同一层次内

#有一个person类,该类下面有name、age两个属性
person:
  name: 小明
  age: 19

2、3 数组(List、set)

数组也有两种写法,同样要注意缩进。

用"-"来表示数组中的一个元素,注意”-“后的一个空格,不能少

hobby:
  - Play basketball
  - sing

2、4 字典 (Dictionaries)

整个结构是一个包含这些字典的列表,这样可以在yaml文件中定义多个不同值的字典的列表。可以方便自动化中的数据驱动。

-
 user:
  email: 3243234@qq.com
  password: 123456
 message: ""
 title: 登录成功!
-
 user:
  email: 45354@ee.ee
  password: kop123456
 message: server internal error
 title: 邮箱格式不对

字典也可以包含更复杂的结构,例如序列。嵌套序列是表示复杂关系数据的好技巧。

注意事项:

  • 1、yaml文件对空格要求极其严格
  • 2、属性和值的大小写都是十分敏感的
  • 3、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的

三、多文档支持

您可以在一个YAML文件中包含多个YAML文档,以使文件组织或数据解析更加容易。

每个文档之间的分隔都用三个破折号(---)标记

email: "123@qq.com"
password: "123456"
message: "nick_name"
---
email: "1234@qq.com"
password: "123456"
message: "Username error or password error"

四、类型转换

YAML 支持使用严格类型标签!!(双感叹号+目标类型)来强制转换类型,下面是内置类型

!!int :整数类型
!!float :浮点类型
!!bool:布尔类型
!!str:字符串类型
!!binary:也是字符串类型
!!timestamp :日期时间类型
!!null:空值
!!set:集合
!!omap,!!pairs :键值列表或对象列表
!!seq:序列,也是列表
!!map:键值表

a: !!float '666' # !! 为严格类型标签
b: '666' # 其实双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串

五、数据重用与合并

 为了保持内容的简洁,避免过多重复的定义,YAML 提供了由锚点标签“&”和引用标签“*”组成的语法,利用这套语法可以快速引用相同的一些数据。

a: &anchor # 设置锚点
  one: 1
  two: 2
  three: 3
b: *anchor # 引用锚点

JSON:{ a: { one: 1, two: 2, three: 3 }, b: { one: 1, two: 2, three: 3 } }

锚点必须加在冒号后,值之前,然后用*符号可以解引用

配合合并标签“<<”使用可以与任意数据进行合并,你可以把这套操作想象成面向对象语言中的继承

human: &base # 添加名为 base 的锚点
    body: 1
    hair: 999
singer:
    <<: *base # 引用 base 锚点,实例化时会自动展开
    skill: sing # 添加额外的属性
programer:
    <<: *base # 引用 base 锚点,实例化时会自动展开
    hair: 6 # 覆写 base 中的属性
    skill: code # 添加额外的属性

其JSON如下:

{ human: { body: 1, hair: 999 }, singer: { body: 1, hair: 999, skill: ‘sing’ }, programer: { body: 1, hair: 6, skill: ‘code’ } }

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值