当前位置: 首页 > news >正文

YAML详解及使用方法

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 # 不用引号包裹- Helloworld # 拆成多行后会自动在中间添加空格- '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: value1child-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: 1two: 2three: 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: 1hair: 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: 2three:four: 4five: 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 yamlwith open('config.yaml', 'r') as f:config = yaml.safe_load(f)print(config)

4.3 生成yaml文件

import yamldata = {'name': '张三', 'age': 18, 'gender': '男'}with open('data.yaml', 'w') as f:yaml.dump(data, f)

相关文章:

YAML详解及使用方法

YAML详解及使用方法 一、基本介绍二、数据类型2.1 纯量(scalars)/标量2.1.1 字符串2.1.2 保留换行(Newlines preserved)2.1.3 布尔值&#xff08;Boolean)2.1.4 整数&#xff08;Integer&#xff09;2.1.5 浮点数&#xff08;Floating Point&#xff09;2.1.6 空&#xff08;Nu…...

垃圾回收器

垃圾回收器就是垃圾回收的实践者&#xff0c;随着JDK的发展&#xff0c;垃圾回收器也在不断的更迭&#xff0c;在不同的场合下使用不同的垃圾回收器&#xff0c;这也是JVM调优的一部分。 1.垃圾回收器的分类 按线程可分为单线程(串行)垃圾回收器和多线程(并行)垃圾回收器。 按…...

SpringBoot 读取配置文件的值为 Infinity

1.配置信息 appid&#xff1a;6E212341234 2.获取方式 Value("${admin}")private String admin; 获取到结果 Infinity 3.修改方案 配置信息上加号 appid&#xff1a;‘6E212341234 yml中使用[单引号]不会转换单引号里面的特殊字符&#xff0c;使用""[双…...

学习笔记230827--vue项目中,子组件拿不到父组件异步获取数据的问题

&#x1f9cb; 问题描述 父组件的数据是请求后台所得&#xff0c;因为是异步数据&#xff0c;就会出现&#xff0c;父组件的值传递过去了&#xff0c;子组件加载不到&#xff0c;拿不到值的问题。 下面从同步数据传递和异步数据传递开始论述问题 &#x1f9cb;&#x1f9cb;1…...

sql:SQL优化知识点记录(三)

&#xff08;1&#xff09;explain之select_type和table介绍 简单的查询类型是&#xff1a;simple 外层 primary&#xff0c;括号里subquery 用到了临时表&#xff1a;derived &#xff08;2&#xff09;explain之type介绍 trpe反映的结果与我们sql是否优化过&#xff0c;是否…...

List<Map>操作汇总

分组 List<Map> mapList new ArrayList<>(); Map<String,List<Map>> mapListGroup mapList.stream().collect(Collectors.groupingBy(e->e.get("xxx").toString())); 最大值最小值 int max maps.stream().mapToInt(e -> new Inte…...

软考:中级软件设计师:网络类型与拓扑结构,网络规划与设计,ip地址与子网划分,特殊含义的IP地址

软考&#xff1a;中级软件设计师:网络类型与拓扑结构 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准…...

linux创建进程

linux创建进程 准备工作 准备工作 在Ubuntu64系统上 1、安装GCC和Make工具 编译器GCC&#xff1a;把C源码转为二进制程序 Make&#xff1a;自动编译多源文件项目 sudo apt-get update #更新存储库 sudo apt-get install build-essential #安装build-essential包 gcc --versio…...

100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to Golang Language.✨✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1…...

【人工智能】—_不确定性、先验概率_后验概率、概率密度、贝叶斯法则、朴素贝叶斯_、最大似然估计

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 文章目录 【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联…...

postgresql-字符函数

postgresql-字符函数 字符串连接字符与编码字符串长度大小写转换子串查找与替换截断与填充字符串格式化MD5 值字符串拆分字符串反转 字符串连接 concat(str, …)函数用于连接字符串&#xff0c;并且忽略其中的 NULL 参数&#xff1b;concat_ws(sep, str, …) 函数使用指定分隔…...

VUE笔记(五)网络通信

一、axios的简介 1、什么是axios 文档&#xff1a;Axios 中文文档 | Axios 中文网 | Axios 是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.js 概念&#xff1a;axios是一个基于Promise的网络请求库&#xff0c;可以用于浏览器和node.js 特点&#xff…...

微信小程序修改数据,input不能实时回显

场景&#xff1a; 填写发票抬头&#xff0c;填写抬头公司时候&#xff0c;会根据用户输入的内容实时获取相关的公司信息&#xff0c;用户选择搜索出来的公司&#xff0c;这时候 setData,但是数据并没有回显&#xff0c;而是需要再需要点一下屏幕。 解决方案&#xff1a; 原来…...

GitHub Copilot三连更:能在代码行里直接提问,上下文范围扩展到终端

量子位 | 公众号 QbitAI 就在昨晚&#xff0c;GitHub Copilot迎来了一波不小的更新。 包括&#xff1a; 全新交互体验——代码行中直接召唤聊天功能&#xff0c;不用切界面&#xff0c;主打一个专注&#xff1b; 改善斜杠命令&#xff0c;一键删除&#xff0c;主打快捷操作、…...

双亲委派机制

双亲委派机制流程 当Application ClassLoader 收到一个类加载请求时&#xff0c;他首先不会自己去尝试加载这个类&#xff0c;而是将这个请求委派给父类加载器Extension ClassLoader去完成。 当Extension ClassLoader收到一个类加载请求时&#xff0c;他首先也不会自己去尝试…...

美团北极星榜单,服务零售的医美新样本

事实证明&#xff0c;任何时候&#xff0c;人们对美的追求都是刚需&#xff0c;只是有时候被压抑了。 德勤中国的《中国医美行业2023年度洞悉报告》&#xff08;以下简称“报告”&#xff09;显示&#xff0c;中国医美市场规模预计在2023年超过2000亿元&#xff0c;实现20%增速…...

geant4 常用代码

1 获取特特定能量范围的特定粒子 E:\examples_understanding\geant4-v11.0.0_note\examples\extended\runAndEvent\RE02 //-- Particle with kinetic energy filter.G4SDParticleWithEnergyFilter* pkinEFilter new G4SDParticleWithEnergyFilter(fltName"gammaE filter&…...

重要通知!eBay将升级买家满意度考核,如何让你的店铺脱颖而出?

8月份&#xff0c;eBay发布了重要通知&#xff0c;为促进跨境卖家积极提升买家体验&#xff0c;升级了针对卖家的买家满意度考核。其中&#xff0c;产品质量是买家满意度考核的核心&#xff0c;是中国卖家急需提升的重中之重&#xff0c;也是eBay考核的重点。 eBay将着眼于产品…...

PHP中pack、unpack的用法

pack string pack ( string $format [, mixed $args [, mixed $... ]] ) 该函数用来将对应的参数($args)打包成二进制字符串。 其中第一个参数$format&#xff0c;有如下选项&#xff1a; a 以NUL字节填充字符串空白 A 以SPACE(空格)填充字符串 h 十六进制字符串&…...

KUKA机器人零点标定的具体方法

KUKA机器人零点标定的具体方法 在进行机器人校正时,先将各轴置于一个定义好的机械位置,即所谓的机械零点。这个机械零点位置表明了同轴的驱动角度之间的对应关系,它用一个测量刻槽表示。 为了精确地确定机器人某根轴的机械零点位置,一般应先找到其预校正位置,然后去掉测量…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...