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: 1b: 哈哈   # 字符串哈哈可不使用引号# 表示方式2:
ab: {"a":1,"b":"哈哈"}

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

students:a: 1b: 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: 12hobby:- 打篮球- 跑步-name: 李四age: 17hobby:- 打羽毛球- 看书

引用
引用已有键的值,可使用&锚点和*别名来引用,可通俗理解为复制粘贴,可复用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: &stuname: zhangsanage: 12students: &stu  {  "name“: zhangsan  ,  ”age“: 12 }

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

# 引用键
# 引用students的内容,使用<< *别名即可,<< 表示合并当前数据
class1:<<: *stusex: man以上内容被读取后输出为:# 键值
students: name: zhangsanage: 12# 引用键
class1:name: zhangsanage: 12sex: 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: <<: *CENTERr: 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行字符串HelloWorld
str3: Hello World
str4: Hello\nWorld

参考

yaml

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

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

相关文章

45.i++和++i

目录 一.基本概念 二.区别 三.总结 四.视频教程 一.基本概念 i和i两者的作用都是自增加1。单独使用的话&#xff0c;i和i&#xff0c;效果都是一样的&#xff0c;就是ii1。 int main() {int i 0;i; } int main() {int i 0;i; } 最后的结果都是1。 二.区别 如上单独使…

SpringBoot—@ConditionalOnBean与@ConditionalOnClass

一、ConditionalOnBean概念 需求场景 比如下面一种场景&#xff0c;我在实例化People对象的时候&#xff0c;需要注入一个City对象。这个时候问题来了&#xff0c;如果city没有实例化&#xff0c;那么下面就会报空指针或者直接报错。 所以这里需求很简单&#xff0c;就是当前c…

就业班 第二阶段 2401--3.19 day4 主从复制

一、MySQL-Replication&#xff08;主从复制&#xff09; 1.1、MySQL Replication 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;…

MySQL面试题--最全面-索引

目录 一、索引 1.MySQL是如何让实现的索引机制&#xff1f; 2.InnoDB索引与MyISAM索引实现的区别是什么&#xff1f; 3.一个表中如果没有创建索引&#xff0c;那么还会创建B树吗&#xff1f; 4.说一下B树索引实现原理&#xff08;数据结构&#xff09; 5.聚簇索引与非聚簇…

弱电工程包括哪些工程?

​一、弱电工程的分部有哪些? 分为基础、主体、装饰工程、强电、弱电、消防、暖通、给排水工程&#xff0c;桩基、筏板、模板、钢筋、混凝土、砌体、粉刷、地坪等 二、弱电工程系统包括哪些? 弱电系统包括&#xff1a;闭路电视监控系统、防盗报警系统、门禁系统、电子巡更…

[小程序开发] 分包加载

一、介绍 分包加载是一种小程序的优化技术&#xff0c;将小程序不同功能的代码&#xff0c;分别打包成不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载&#xff0c;在构建小程序分包项目时&#xff0c;构建会输出一个或多个分包&#xff…

python的stone音乐播放器的设计与实现flask-django-php-nodejs

该系统利用python语言、MySQL数据库&#xff0c;flask框架&#xff0c;结合目前流行的 B/S架构&#xff0c;将stone音乐播放器的各个方面都集中到数据库中&#xff0c;以便于用户的需要。该系统在确保系统稳定的前提下&#xff0c;能够实现多功能模块的设计和应用。该系统由管理…

python_BeautifulSoup爬取汽车评论数据

爬取的网站&#xff1a; 完整代码在文章末尾 https://koubei.16888.com/57233/0-0-0-2 使用方法&#xff1a; from bs4 import BeautifulSoup 拿到html后使用find_all()拿到文本数据&#xff0c;下图可见&#xff0c;数据标签为&#xff1a; content_text soup.find_all…

006——GenericTimer(基于liteos-a)

目录 Generic Timer介绍 1.1 硬件结构 1.1.1 System Counter特性 1. 两种访问方式 2. CP15寄存器 3. MemoryMapped寄存器 1.1.2 Timer特性 1.2 SystemCounter时钟源 1.3 使用方法 GenericTimer源码分析 1.2 源码分析 1.2.1 初始化 1.2.2 启动Timer 1.2.3 中断处理…

SQPSK

文章目录 [1]张显辉,沈国松.SQPSK调制体制在跟踪与数据中继卫星中的应用[J].遥测遥控,2007(S1):26-29.[2]保骏.QPSK、SQPSK信号解调相位模糊及其对Viterbi译码的影响[J].四川兵工学报,2011,32(03):53-55.[3]赵辉,严晓芳,张玉. 星载SQPSK高速调制系统的设计[C]//中国通信学会.20…

在服务器上训练faster-rcnn模型(pycharm和Termius)

本文主要介绍使用服务器训练模型的两种方式&#xff1a;pycharm&#xff08;可视化界面友好&#xff09;and终端&#xff0c;本人用的是macos系统&#xff0c;可能pycharm某些入口的位置不一样&#xff0c;本教程代码以faster-rcnn为例 准备工作&#xff1a; 1.知道自己所用服…

外卖店优先级c++

题目 输入样例&#xff1a; 2 6 6 1 1 5 2 3 1 6 2 2 1 6 2输出样例&#xff1a; 1样例解释 6时刻时&#xff0c;1 号店优先级降到 3&#xff0c;被移除出优先缓存&#xff1b;2 号店优先级升到 6&#xff0c;加入优先缓存。 所以是有 1 家店 (2 号) 在优先缓存中。 思路 …

docker 安装部署 jenkins

今天 小☀ 给大家普及一下什么是 jenkins&#xff01;&#xff01; Jenkins是一个开源软件项目&#xff0c;基于Java开发的持续集成工具。它提供了一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins起源于Hudson&#xff0c;主要用于持续、自动地构建、…

C语言 自定义类型:结构体

目录 前言 一、结构体类型 1.1 结构体的声明 1.2 结构体变量的创建和初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 二、结构体的对齐 2.1 对齐规则 2.2 内存对齐的原因 2.3 修改默认对齐数 2.4 结构体传参 三、结构体实现位段 3.1 位段的内存分配 3.2 段的跨平…

通过JWT完成token登录验证

前言 什么是JWT&#xff1f; 全称是JSON Web token&#xff0c;是用于对应用程序上的用户进行身份验证的标记&#xff0c;使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据 使用JWT的优势 提高了程序的可伸缩性&#xff0c;也极大的提高了应用程序的安全…

几种常见的IO模型学习

IO模型 IO模型&#xff08;输入输出模型&#xff09;是计算机科学中用于描述程序如何处理输入、产生输出以及与外部系统交互的一种概念模型。在操作系统和网络编程中&#xff0c;IO模型尤其重要&#xff0c;因为它们决定了程序如何与文件、网络套接字和其他资源进行通信。以下…

Harbor介绍

1.什么是Harbor Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开源。 Harbor提供了比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;尤其适合企业环境使用。以下是Harbor的一些关键特性&#xff1a; 权限管理&#xff08;RBAC&#x…

Ribbon知识点

1、通过类实现重写Ribbon规则 1.1注意 这个类一定不能跟启动类放在同一个包下面&#xff0c;不能被componentScan给扫描到。 需要如图放置&#xff1a; 要是被componentScan给扫描到&#xff0c;则会被所有的服务提供方所共享&#xff0c;那么就不能实现指定服务用不同的Ribbo…

灵神DP题单---划分型 DP---§6.1 判定能否划分

这里的状态定义一般使用DP【i】 表示 考虑前i个东西能否满足条件&#xff0c;然后我们枚举上一次的转移位置就好了 2369. 检查数组是否存在有效划分 需要注意的是我习惯从1开始写&#xff0c;所以要处理好边界的下标问题 class Solution { public:bool validPartition(vector&l…

java网络原理(三)----三次握手四次挥手

三次握手 三次握手是建立连接的过程&#xff0c;四次挥手是断开连接的过程&#xff0c;三次握手发生在socket.accept()之前。 客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手&#xff0c;这个过程建立完了后&#xff0c;连接就好了。 A和B…