YAML基本介绍和使用语法

news2024/12/24 3:04:41

YAML详解及使用方法

  • 一、基本介绍
  • 二、数据类型
    • 2.1 纯量(scalars)/标量
      • 2.1.1 字符串
      • 2.1.2 保留换行(Newlines preserved)
      • 2.1.3 布尔值(Boolean)
      • 2.1.4 整数(Integer)
      • 2.1.5 浮点数(Floating Point)
      • 2.1.6 空(Null)
      • 2.1.7 时间戳(Timestamp)
      • 2.1.8 类型转换
    • 2.2 数组
      • 2.2.1 一组以**区块格式(Block Format)(即“破折号+空格”)**开头的数据组成一个数组
      • 2.2.2 同时也支持**内联格式(Inline Format)**来表达(用方括号包裹,逗号加空格分隔,类似 JSON)
      • 2.2.3支持多维数组(用缩进表示层级关系)
    • 2.3对象(Mapping)
      • 2.3.1 表示以键值对(key: value)形式出现的数据
      • 2.3.2 支持多层嵌套
      • 2.3.3支持流式风格( Flow style)的语法
      • 2.3.4 使用问号
    • 2.4 锚点
    • 2.5 合并标签
  • 三、yaml 文件的特点
    • 3.1 大小写敏感
    • 3.2 使用缩进表示层级关系
    • 3.3 缩进时不允许使用Tab键,只允许使用空格
    • 3.4 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
    • 3.5 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
    • 3.6 注释标识为#
    • 3.7一个文件中可以包含多个文件的内容
  • 四、使用方法
    • 4.1 安装方法
    • 4.2 解析yaml 文件
    • 4.3 生成yaml文件
      • 参考&&引用

一、基本介绍

YAML是一种计算机数据序列化语言。(YAML is a computer data serialization language.)YAML is a human friendly data serialization standard for all programming languages(YAML是一个对所有编程语言都很友好的数据序列化标准),可以用于多种编程语言。因其良好的跨语言、跨平台、易于理解、格式简单而广泛应用于配置文件、数据文件、日志文件等。

二、数据类型

YAML文档以人类可读的文本形式表示计算机程序的本地数据结构。YAML文档中的节点可以有三种基本数据类型:

2.1 纯量(scalars)/标量

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

2.1.1 字符串

字符串一般不需要用引号包裹,但是如果字符串中使用了反斜杠“\”开头的转义字符就必须使用引号包裹

# YAML
strings:
  - Hello without quote # 不用引号包裹
  - Hello
   world # 拆成多行后会自动在中间添加空格
  - 'Hello with single quotes' # 单引号包裹
  - "Hello with double quotes" # 双引号包裹
  - "I am fine. \u263A" # 使用双引号包裹时支持 Unicode 编码
  - "\x0d\x0a is \r\n" # 使用双引号包裹时还支持 Hex 编码
  - 'He said: "Hello!"' # 单双引号支持嵌套"

// JSON
"strings":
  [ "Hello without quote",
    "Hello world",
    "Hello with single quotes",
    "Hello with double quotes",
    "I am fine. ☺",
    "\r\n is \r\n",
    "He said: 'Hello!'" ]

2.1.2 保留换行(Newlines preserved)

使用**竖线符“ | ”**来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留

# YAML
lines: |
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行

// JSON
"lines": "我是第一行\n我是第二行\n  我是吴彦祖\n     我是第四行\n我是第五行"

2.1.3 布尔值(Boolean)

“true”、“True”、“TRUE”、“yes”、“Yes”和“YES”皆为真
“false”、“False”、“FALSE”、“no”、“No”和“NO”皆为假

# YAML
boolean:
  - true # True、TRUE
  - yes # Yes、YES
  - false # False、FALSE
  - no # No、NO

// JSON
"boolean": [ true, true, false, false ]

2.1.4 整数(Integer)

支持二进制表示

# YAML
int:
  - 666
  - 0001_0000 # 二进制表示

// JSON
"int": [ 666, 4096 ]

2.1.5 浮点数(Floating Point)

支持科学计数法

# YAML
float:
  - 3.14
  - 6.8523015e+5 # 使用科学计数法

// JSON
"float": [ 3.14, 685230.15 ]

2.1.6 空(Null)

“null”、“Null”和“~”都是空,不指定值默认也是空

# YAML
nulls:
  - null
  - Null
  - ~
  -

// JSON
"nulls": [ null, null, null, null ]

2.1.7 时间戳(Timestamp)

# YAML
date1: 2020-05-26
date2: 2020-05-26T01:00:00+08:00
dete3: 2020-05-26T02:00:00.10+08:00
date4: 2020-05-26 03:00:00.10 +8

// JavaScript
date1: Tue May 26 2020 08:00:00 GMT+0800 (中国标准时间),
date2: Tue May 26 2020 01:00:00 GMT+0800 (中国标准时间),
dete3: Tue May 26 2020 02:00:00 GMT+0800 (中国标准时间),
date4: Tue May 26 2020 03:00:00 GMT+0800 (中国标准时间)

2.1.8 类型转换

YAML 支持使用严格类型标签“!!”(双感叹号+目标类型)来强制转换类型

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

// JSON
"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true"
"f": "yes"

YAML 也可以使用一些更高级的类型,但是并不一定兼容所有解析器,包括集合(Sets)、有序映射(Ordered Map)、十六进制数据(Hexdecimal)和二进制数据(Binary)。

2.2 数组

一组按序排列的值(简称 “序列或列表”)数组前加有 “-” 符号,符号与值之间需用空格分隔。

2.2.1 一组以**区块格式(Block Format)(即“破折号+空格”)**开头的数据组成一个数组

# YAML
values:
  - value1
  - value2
  - value3

// JSON
"values": [ "value1", "value2", "value3" ]

2.2.2 同时也支持**内联格式(Inline Format)**来表达(用方括号包裹,逗号加空格分隔,类似 JSON)

# YAML
values: [value1, value2, value3]

// JSON
"values": [ "value1", "value2", "value3" ]

2.2.3支持多维数组(用缩进表示层级关系)

# YAML
values:
  -
    - value1
    - value2
  -
    - value3
    - value4

// JSON
"values": [ [ "value1", "value2"], ["value3", "value4"] ]

2.3对象(Mapping)

键值对的集合(简称 “映射或字典”)键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔。

2.3.1 表示以键值对(key: value)形式出现的数据

使用“冒号+空格”来分开键与值

# YAML
key: value

// JSON
"key": "value"

2.3.2 支持多层嵌套

# YAML
key:
  child-key1: value1
  child-key2: value2

// JSON
"key": {
  "child-key1": "value1",
  "child-key2": "value2",
}

2.3.3支持流式风格( Flow style)的语法

(用花括号包裹,用逗号加空格分隔,类似 JSON)

# YAML
key: { child-key1: value1, child-key2: value2 }

// JSON
"key": { "child-key1": "value1", "child-key2": "value2" }

2.3.4 使用问号

使用问号“?”*声明一个复杂对象,允许你使用多个词汇(数组)来组成键

# YAML
?
  - keypart1
  - keypart2
:
  - value1
  - value2

2.4 锚点

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

# 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
}

2.5 合并标签

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

# YAML
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" }

其他数据类型查看https://yaml.com/doc/glossary/

三、yaml 文件的特点

3.1 大小写敏感

One: 1
one: 2

3.2 使用缩进表示层级关系

3.3 缩进时不允许使用Tab键,只允许使用空格

3.4 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;

# YAML
one:
  two: 2
  three:
    four: 4
    five: 5

// 以上的内容转成 JSON 后
"one": {
  "two": 2,
  "three": {
    "four": 4,
    "five": 5 
  }
}

3.5 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;

3.6 注释标识为#

# 我是注释
# 我也是注释

注:只支持单行注释

3.7一个文件中可以包含多个文件的内容

  • 用“ — ”即三个破折号表示一份内容的开始
  • 用“ … ”即三个小数点表示一份内容的结束(非必需)
---
# 这是第一份内容
one: 1
# 其他内容...
...

---
# 这是第二份内容
two: 2
# 其他内容...

四、使用方法

在这里插入图片描述
官网给出编程语言对应的第三方库,下面以python为例,展示YAML的实际使用.

4.1 安装方法

pip install pyyaml

4.2 解析yaml 文件

import yaml

with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f)

print(config)

4.3 生成yaml文件

import yaml

data = {'name': '张三', 'age': 18, 'gender': '男'}

with open('data.yaml', 'w') as f:
    yaml.dump(data, f)

参考&&引用

  1. https://www.yaml.info/learn/index.html

  2. 在线YAML转JSON工具

  3. YAML详解及使用方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/950186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

找到9个可以编辑的线框图模板资源,自取

大家好&#xff0c;我是设计师l1m0&#xff0c;最近找到了的9个还比较不错的线框图模板&#xff0c;想要分享给大家。顺便提一下这个免费的资源下载网站&#xff1a;Pixso资源社区。 相比成熟的设计师都知道线框图对产品设计来说扮演着什么角色&#xff0c;在这里不做过多赘述…

搬家小程序开发攻略

随着互联网的快速发展&#xff0c;小程序已成为各行各业实现线上服务的重要工具。特别是在搬家行业&#xff0c;小程序的应用能够让用户更加便捷地获取服务。本文将为您详细介绍如何使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;轻松开发一款搬家小程序&#xff0c;实…

echarts环形图,饼图 自定义title居中显示

需求 方法一 使用 div 定位 将数字放在饼图中间 <div style"position: relative;"><pieChart :chartObj"usageMap" /><div class"pieNum" :style"{ left: drawer ? 40px : 65px }"><div class"pieTitle&q…

Mysql-索引查询相关

一、单表查询 1.1 二级索引为null 不论是普通的二级索引&#xff0c;还是唯一二级索引&#xff0c;它们的索引列对包含 NULL 值的数量并不限制&#xff0c;所以我们采用key IS NULL 这种形式的搜索条件最多只能使用 ref 的访问方法&#xff0c;而不是 const 的访问方法 1.2 c…

零知识证明(zk-SNARK)(二)

From Computational Problem to zk-SNARK 本部分就是将计算难题转换为多项式&#xff0c;然后使用zk-SNARK。 &#xff08;注&#xff1a;以下用 P&#xff0c;V 替代 Prover&#xff0c;Verifier&#xff09; 计算难题->R1CS R1CS(Rank-1 Constraint System)是一种能够…

网络流量监控-sniffnet

{alert type“info”} 今天来分享一个监控流量的应用sniffnet。 github项目地址&#xff1a;https://github.com/GyulyVGC/sniffnet {/alert} 可以在github的readme上看到这个程序有的特性&#xff1a; 为什么要介绍它呢&#xff1a;主要是多线程、跨平台、可靠、操作简单 我…

视频云存储/安防监控视频智能分析网关V3:明烟/明火检测功能详解

智能分析网关系列是基于边缘AI计算技术&#xff0c;可对前端摄像头采集的视频流进行实时检测分析&#xff0c;能对监控画面中的人、车、物进行识别。我们的AI边缘计算网关硬件——智能分析网关目前有5个版本&#xff1a;V1、V2、V3、V4、V5&#xff0c;每个版本都能实现对监控视…

dbeaver离线安装clickhouse连接驱动

Clickhouse 数据库连接工具——DBeaver 主要介绍了Clickhouse 数据库连接工具——DBeaver相关的知识&#xff0c;希望对你有一定的参考价值。 Clickhouse 数据库连接工具——DBeaver 1.下载 DBeaver 和 连接驱动 https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.…

学习JAVA打卡第四十五天

StringBuffer类 StringBuffer对象 String对象的字符序列是不可修改的&#xff0c;也就是说&#xff0c;String对象的字符序列的字符不能被修改、删除&#xff0c;即String对象的实体是不可以再发生变化&#xff0c;例如&#xff1a;对于 StringBuffer有三个构造方法&#xff…

QPS、TPS、RT、并发数、吞吐量分别是什么意思

首先&#xff0c;他们都是高并发系统中的系统指标 一、QPS&#xff1a;每秒查询 QPS&#xff08;Queries Per Second&#xff09;&#xff1a;是衡量信息检索系统&#xff08;例如搜索引擎或数据库&#xff09;在一秒钟内接收到的搜索流量的一种常见度量。该术语在任何请求-响…

踏进字节的那一瞬间,我泪目了,这457天的外包经历值了....

一年半吗&#xff1f;我只记得437个日日夜夜 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2021年8月&#xff0c;我有幸成为了字节跳动…

【核心复现】基于合作博弈的综合能源系统电-热-气协同优化运行策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【0830 QT作业】QT第一个程序、创建登录框(代码实现)

一、QT第一个程序 结构介绍 1.1 QT程序结构 1.2 .pro QT core gui sql network # QT&#xff1a;工程所需的类库 # &#xff1a;作为连接&#xff0c;后面可添加库&#xff0c;以空格隔开 # core&#xff1a;核心库 # gui &#xff1a;图形化界面相关类库 # sql &…

火热的大模型AIGC对数据中心存储趋势有什么影响?

随着人工智能和大数据技术的不断发展&#xff0c;业内AIGC&#xff08;人工智能、图形处理和云计算&#xff09;和大模型的发展趋势正在对数据中心存储发展方向产生深远的影响&#xff0c;主要集中对数据量和高性能计算的诉求。 大模型的普及要求数据中心存储具备更大的容量。大…

报错 - net::ERR_ABORTED 500 (Internal Server Error)

报错&#xff1a;net::ERR_ABORTED 500 (Internal Server Error) 根据提示找到对应文件 解决&#xff1a;检查代码&#xff0c;根据高亮颜色判断&#xff0c;发现箭头函数漏了一个>。 报错&#xff1a;Uncaught TypeError: Assignment to constant variable. 原因&#x…

计算机毕设之Python的高校成绩分析(含文档+源码+部署)

本系统阐述的是一个高校成绩分析系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构。…

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容&#xff0c;Vector的内容于string非常相似&#xff0c;只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …

c++学习之vector的实现

在学习实现vector之前我们会看到对于库中的vector的实现&#xff0c;这里并非使用在学习string那样的定义方式&#xff0c;而是利用迭代器&#xff0c;也就是指针来实现的&#xff0c;这在功能的实现时极大的方便了我们。 那么我们就模仿库这样的方式实现我们呢经常会用到的一些…

Vision Transformer(vit)原理分析以及特征可视化

目录 Vit简介 Vit model结构图 vit输入处理 图像分块 class token与position的添加 特征提取 vit代码 Vit简介 Vision Transformer&#xff08;ViT&#xff09;是一种基于Transformer架构的深度学习模型&#xff0c;用于图像识别和计算机视觉任务。与传统的卷积神经网络…

【spring】一文带你弄懂Spring Bean的生命周期(超详细,超级通俗易懂!!)

目录 首先让我们来回顾一下Spring中的Bean是什么 Bean的生命周期 然后让我们由浅及深的对Bean的创建过程进行了解 首先来看最核心的五步骤 然后让我们逐层递进&#xff0c;学习一下七步骤版本吧 现在我们就可以进一步了解十步骤的版本&#xff08;完整的生命周期&#xff…