yaml 语法和在线解析工具

文章目录

  • 在线解析工具
  • 1. 简介
  • 2. 语法规则
  • 3. 数据类型
    • 3.1 数组:
    • 3.2对象:
    • 3.3 标量
    • 3.4 复合结构
    • 3.5 锚点
      • 3.5.1 单个锚点
      • 3.5.6 多个锚点
    • 3.6 引号
  • 参考

在线解析工具

工具1
工具2

1. 简介

Yaml是一种可读性高的数据标记语言,Yaml文件是一种配置文件,一般主要用于存储全局配置信息等,可存放不同类型的数据,如列表,字典等。

2. 语法规则

  • 文件后缀.yml
  • 大小写敏感
  • 空格缩进区分层级
  • 且空格数量不要求,对齐即可,但是建议2或4个,便于维护。缩进只能使用空格不能使用TAB
  • : 后面要有个空格,否则会把整体当个字符串
    如 下图,只有 students3才顺利解析, students1和 students2 都由于空格问题,导致解析错误
    在这里插入图片描述- #表示注释
    备注:详细用法见数据类型小节例子

3. 数据类型

  • 数组:序列/列表,按次序排序的值
  • 对象:映射/字典/哈希,键值对
  • 标量:单个值,不可再分,如字符串,布尔值,Null等

备注:

  • 冒号和‘-’后的值前面需空一个空格
  • 字符串不使用引号
  • 单引号转义特殊字符、空格等

数组

序列/列表,按次序排序的值

3.1 数组:

如列表numbers:[1,2,3,4,5]

# - 列表值,使用“-”表示列表中的元素
# 表示方式1:
numbers:
  - 1
  - 2
  - 3
  - 4
  - 5

#表示方式2:
numbers: [1,2,3,4,5]

对象

映射/字典/哈希,键值对

3.2对象:

如字典:ab:{“a”:1,“b”:“哈哈”}

# 表示方式1
ab: 
  a: 1
  b: 哈哈   # 字符串哈哈可不使用引号

# 表示方式2:
ab: {"a":1,"b":"哈哈"}

注意字典 key:value形式时,key必须带引号
students: {“a”:1,“b”:2,c:3} 会被识别为:

students:
  a: 1
  b: 2
  'c:3:3': null

3.3 标量

单个值,不可再分,如字符串,布尔值,Null,日期等

# 标量
# 字符串
name:susy

# 布尔值
isFlag: True

# Null:使用~表示
a: ~

# 日期:YYYY-MM-DD格式, 
d: 2023-03-06

# 时间:YYYY-MM-DDThh:mm:ss+时区
t: 2018-02-17T15:02:31+08:00

# 特殊字符、空格 使用单引号转义
email: '123@qq.com'
talk: 'Hello World'
  • 日期必须使用ISO 8601格式,即yyyy-MM-dd
  • 可以使用双引号或者单引号包裹特殊字符或带空格的字符串

3.4 复合结构

包含数组,对象,标量等结构

复合结构:
{“code”:200,students:[{name:“张三”,age:12,hobby:[“打篮球”,“跑步”]},{name:“李四”,age:17,hobby:[“打羽毛球”,“看书”]}]}

# hobby也可以使用行内写法:
# hobby:[打篮球,跑步]
code: 200
students:
    -
      name: 张三
      age: 12
      hobby:
          - 打篮球
          - 跑步
    -
      name: 李四
      age: 17
      hobby:
          - 打羽毛球
          - 看书

引用
引用已有键的值,可使用&锚点和*别名来引用,可通俗理解为复制粘贴,可复用yaml文件中已有键值对。

3.5 锚点

3.5.1 单个锚点

引用重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用

当锚点是 标量类型是,不管是位于上层,还是某个属性,都可以用于下面的语法:

#方式一 位于属性中:在hr中,使用&SS为Sammy Sosa设置了一个锚点(引用)名称为SS,在rbi中使用*SS完成了锚点使用
hr:
- Mark McGwire
- &SS Sammy Sosa
rbi:
- *SS 
- Ken Griffey

#执行结果
{rbi=[Sammy Sosa, Ken Griffey], hr=[Mark McGwire, Sammy Sosa]}


#方式2 位于上层:注意不能独立的定义锚点,比如不能直接这样写: &SS Sammy Sosa;
SS: &SS Sammy Sosa
hr:
 - Mark McGwire
 - *SS
rbi:
 - *SS 
 - Ken Griffey

当 锚点引用的是对象类型时,需要结合<<: 来一起使用

# 使用&别名建立锚点,将students全部内容设别名为“stu”
students: &stu
  name: zhangsan
  age: 12students: &stu  {  "name“: zhangsan  ,  ”age“: 12 }

再来看看此时的锚点语法:

# 引用键
# 引用students的内容,使用<< *别名即可,<< 表示合并当前数据
class1:
  <<: *stu
  sex: man


  
以上内容被读取后输出为:

# 键值
students: 
  name: zhangsan
  age: 12

# 引用键
class1:
  name: zhangsan
  age: 12
  sex: man

本质上是合并的结果

3.5.6 多个锚点

看个复杂例子,会涉及到多个锚点的情况:

#在merge中,定义了四个锚点,分别在sample中使用。
merge:
  - &CENTER { x: 1, y: 2 }
  - &LEFT { x: 0, y: 2 }
  - &BIG { r: 10 }
  - &SMALL { r: 1 }

#sample1中,<<: *CENTER意思是引用{x: 1,y: 2},并且合并到sample1中,那么合并的结果为:sample1={r=10, y=2, x=1}
sample1: 
    <<: *CENTER
    r: 10

#sample2中,<<: [*CENTER, *BIG] 意思是联合引用{x: 1,y: 2}和{r: 10},并且合并到sample2中,那么合并的结果为:sample2={other=haha, x=1, y=2, r=10}
sample2:
    << : [ *CENTER, *BIG ]
    other: haha
 
#sample3中,引入了*CENTER, *BIG,还使用了r: 100覆盖了引入的r: 10,所以sample3值为:sample3={r=100, y=2, x=1}
sample3:
    << : [ *CENTER, *BIG ]
    r: 100

主要是要你知道 :

  • 多个锚点 ,需要使用 [] ,大括号本身不是啥特殊含义的东西,仅仅表示多个对象被merger而已。如果看成普通数组,就难以理解了。
  • 自身属性优先级高,merge过来的同名属性优先级低

3.6 引号

引号可以对于特殊字符,是决定可视或不可视:

str1: "Hello World"
str2: "Hello\nWorld"

str3: 'Hello World'
str4: 'Hello\nWorld'

输出结果:

str1: Hello World
str2: |-         #表示程序解析该段 yaml时,看到的是2行字符串
  Hello
  World
str3: Hello World
str4: Hello\nWorld

参考

yaml

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识(三)基本编程题,应用题

基本编程题 1.从键盘输入一个整数和一个字符&#xff0c;以逗号隔开&#xff0c;在屏慕上显示输出一条信息。 示例如下: 输入&#xff1a; 10, 输出&#xff1a; 10 s input("请输入一个整数和一个字符&#xff0c;用逗号隔开&#xff1a;")l s.split(",&q…

使用vscode调试代码

Step1&#xff1a;在系统中安装gdb 在Ubuntu系统下安装gdb&#xff1a; apt-get update apt-get install gdb 在CentOS系统下安装gdb&#xff1a; yum install gdb Step2&#xff1a;编译生成Debug版本的可执行程序 假设源文件名称为test.cpp&#xff0c;使用g编译器&#…

你不知道的console

console console 对象提供了浏览器控制台调试的接口&#xff0c;我们可以从任何全局对象中访问到它&#xff0c;在不同浏览器上它的工作方式可能不一样&#xff0c;但通常都会提供一套共性的功能。 1.console.log() 打印内容的通用方法&#xff0c;使用方法可以参考使用字符…

DBO优化LSBoost回归预测(matlab代码)

DBO-LSBoost回归预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法&#xff0c;在2022年底提出&#xff0c;主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比…

【系统架构师】-计算机网络

1、网络的划分 网络性能指标&#xff1a;速率、带宽(频带宽度或传送线路速率)、吞吐量、时延、往返时间、利用率。 网络非性能指标&#xff1a;费用、质量、标准化、可靠性、可扩展性、可升级性、易管理性和可维护性。 总线型(利用率低、干扰大、价格低)、 星型(交换机转发形…

【Linux】系统开启和关闭过程

Linux 系统启动过程 BIOS 自检&#xff1a;在计算机开机时&#xff0c;BIOS 会进行自检&#xff0c;检查硬件设备是否正常。 加载引导程序&#xff1a;BIOS 自检完成后&#xff0c;会加载引导程序&#xff0c;如 GRUB、LILO 等。引导程序会加载内核和初始化 RAM 磁盘&#xff…

数据结构:详解【栈和队列】的实现

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现1.3 栈的功能1.4 栈的功能的实现1.5 完整代码 2. 队列2.1 队列的概念及结构2.2 队列的实现2.3 队列的功能2.4 队列的功能的实现2.5 完整代码 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的…

如何看待腾讯 QQ 浏览器抄袭 Arc

今天在 Reddit 的帖子上看到&#xff0c;QQ 浏览器抄袭了 Arc 而且还是 Arc 官方发布的 It looks very similar lol 看起来也太像了&#xff0c;笑死我了 稍微震惊了一下&#xff0c;带着疑惑&#xff0c;打开了 QQ 浏览器官网页 点击下载 ⬇️ 下载后打开 翻找了下&#xff0…

2004-2022年各省化学需氧量数据(无缺失)

2004-2022年各省化学需氧量数据&#xff08;无缺失&#xff09; 1、2004-2022年 2、范围&#xff1a;31省 3、指标&#xff1a;化学需氧量 4、来源&#xff1a;各省年鉴、国家统计局、环境年鉴 5、指标解释&#xff1a;化学需氧量(COD)排放量指工业废水中COD排放量与生活污…

java 泛型(下)

本篇文章主要说明的是类型通配符、可变参数、可变参数的使用等。 在学习之前&#xff0c;希望能对泛型有个大概了解&#xff0c;可参考链接 java 泛型&#xff08;上&#xff09;-CSDN博客 也希望对泛型类、泛型接口、泛型方法有个大概的认识及使用&#xff0c;可参考链接 j…

【保姆级教程】YOLOv8_Track多目标跟踪,快速运行

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple二、下载测试视频&#xff0c;预训练权重 测试视频 链接&am…

nuc980下 RTL8188EUS_wifi移植过程

我使用的nuc980型号为NUC980DK61YC&#xff0c;内核版本为"linux 4.4.115" &#xff0c;以下过程是在自己单片机上移植的过程&#xff0c;仅供参考&#xff0c;不同配置环境可能会有不同的坑需要踩&#xff0c;希望会对各位小伙伴有帮助。 1.驱动添加与调整 注意&a…

[综述笔记]A Survey on Deep Learning for Neuroimaging-Based Brain Disorder Analysis

论文网址&#xff1a;Frontiers | A Survey on Deep Learning for Neuroimaging-Based Brain Disorder Analysis (frontiersin.org) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论…

NET 自定义控件

如果添加 Category&#xff0c; 自定义控件&#xff0c;会放在杂项中

03-Java面试题八股文-----java基础——10题

41、HashMap 的长度为什么是 2 的 N 次方呢&#xff1f; 为了能让 HashMap 存数据和取数据的效率高&#xff0c;尽可能地减少 hash 值的碰撞&#xff0c;也就是说尽量把数据能均匀的分配&#xff0c;每个链表或者红黑树长度尽量相等。 我们首先可能会想到 % 取模的操作来实现。…

6 修改主机名和HOSTS文件

后期我们会配置多台服务器&#xff0c;那么每台服务器我们都会给定一个主机名&#xff0c;方便后期通过主机名进行访问。主机名的修改我们可以在安装操作系统时对其修改&#xff0c;如果忘记了&#xff0c;就可以修改配置文件完成&#xff0c;像后期我们进行虚拟机克隆后&#…

Unity Toggle与Toggle Group的妙用

Toggle与Toggle Group结合使用&#xff0c;妙处多多。 因为在同一Toggle Group内只有一个Toggle可以被选中&#xff0c;那么对于我们要创建单选按钮组、游戏的一些开关、暗夜模式、筛选不同显示内容等功能都非常好用。 比如我要实现通过点击不同按钮,从而筛选显示不同内容&am…

基于springboot的“漫画之家”系统

目录 背景 技术简介 系统简介 界面浏览 背景 随着科技的不断进步&#xff0c;计算机已经变成了人们日常生活和工作不可或缺的工具。在这样的环境下&#xff0c;互联网技术被广泛运用于各个领域&#xff0c;以提升工作和生活的效率&#xff0c;推动了网络信息技术的迅猛发展…

物联网和工业物联网的区别——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网&#xff08;IoT&#xff09;和工业物联网&#xff08;IIoT&#xff09;作为现代科技的重要分支&#xff0c;正在逐渐渗透到我们的日常生活和工业生产中。它们的应用范围广泛&#xff0c;涵盖了从智能家居到自动化工厂的多个领域。…

基于SSM的土家风景文化管理平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的土家风景文化管理平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…
最新文章