yaml学习笔记
文章目录
- yaml语言学习
- yaml 简介
- yaml 和json 区别
- 基本语法
- 数据类型
- YAML 对象
- YAML 数组
- 锚点和引用
- 纯量
- 参考文档
yaml语言学习
最近发现在学习k8s中各种配置文件 都是使用的yaml 这种格式, 包括 docker-compose.yaml
也都是用这个格式配置部署项目信息,我就了解了一下这个语法就有了这篇文章.
yaml 简介
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。,它是一种高可读的数据序列号语言, 可以被绝大数编程语言支持使用, 主要用于数据序列号,配置文件等.
在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
数据序列化就是可以高效的表示或描述数据以及数据关系的,以便用于储存和传输.
优点:
- 语法简单
- 结构清晰,易于阅读
- 功能丰富,可以描述比JSON更加复杂的结构
yaml 和json 区别
- yaml 中 可以添加注释的.json 是不支持添加注释
- yaml 中有锚点和引用的概念, 而json 中没有.
基本语法
- 大小写敏感
- 使用缩进表示层级关系, 缩进必须是空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
#
表示注释
缩进数量不重要, 一般设为2个,或者4个都可以. 只是表示层级关系.
app:name: erverydayserver: host: bb.comport: 3338ip: 11.11.22.33
{"app": {"name": "erveryday","server": {"host": "bb.com","port": 3338,"ip": "11.11.22.33"}}
}
spring:datasource:driveClassName: com.mysql.jdbc.Driverurl: aabb.comusername: testpassword: xxxxxx-xxx-xxxtype: com.alibaba.Database
转换后JSON
{"spring": {"datasource": {"driveClassName": "com.mysql.jdbc.Driver","url": "aabb.com","username": "test","password": "xxxxxx-xxx-xxx"}},"type": "com.alibaba.Database"
}
数据类型
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
YAML 对象
对象键值对使用冒号结构表示 key: value, 注意: 冒号后面要加一个空格。
也可以使用 key:{key1: value1, key2: value2, …}。
对象中也是可以嵌套对象的.
app: erveryday
server:host: bb.comport: 3338ip: 11.11.22.33
对应的json 文件如下:
{"app": "erveryday","server": {"host": "bb.com","port": 3338,"ip": "11.11.22.33"}
}
YAML 数组
以 -
开头的行表示构成一个数组:
注意 -
后面有一个空格
- A
- B
- Cpersons:- frank- xiaoming- zhangsan
fruits:- apple- orange- banana- pear
转换为JSON对应
{"fruits": ["apple","orange","banana","pear"]
}
锚点和引用
定义锚点 可以使用锚点的数据
&
用来建立锚点(defaults),<<
表示合并到当前数据,*
用来引用锚点。
spring:datasource:dev:driveClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306username: devpassword: xxxxxx-xxx-xxxtype: com.alibaba.Databasetest:driveClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306username: testpassword: xxxxxx-xxx-xxxtype: com.alibaba.Databaseprod:driveClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://aaa.bbb.com:3306username: prodpassword: xxxxxx-xxx-xxxtype: com.alibaba.Database
比如上面 driveClassName
都是一样的, 我需要写三遍, 这个时候 可以使用锚点来解决这个问题.
定义一个&
+ ClassName
作为一个锚点, 引用的时候 使用 *ClassName
来引用锚点的值, 其中 ClassName 就是锚点名称.
spring:datasource:dev:driveClassName: &ClassName com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306username: devpassword: xxxxxx-xxx-xxxtype: com.alibaba.Databasetest:driveClassName: *ClassNameurl: jdbc:mysql://localhost:3306username: testpassword: xxxxxx-xxx-xxxtype: com.alibaba.Databaseprod:driveClassName: *ClassNameurl: jdbc:mysql://aaa.bbb.com:3306username: prodpassword: xxxxxx-xxx-xxxtype: com.alibaba.Database
第二种方式引用, 定义个 默认配置信息, &default
这是一个锚点,然后 需要吧这个信息 放到 下面的配置段 中, 同时 我不希望有key 值, 可以使用 <<
表示连接引用, 后面使用 *default
即可.
# 定义 default 锚点
defaults: &defaultsdriver: mysqlhost: localhostdev:database: devdefault: *defaultstest:database: test<<: *defaultsprod:database: prod<<: *defaults
{"defaults": {"driver": "mysql","host": "localhost"},"dev": {"database": "dev","driver": "mysql","host": "localhost"},"test": {"database": "test","driver": "mysql","host": "localhost"},"prod": {"database": "prod","driver": "mysql","host": "localhost"}
}
纯量
纯量是最基本的,不可再分的值,包括:
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
boolean: - TRUE #true,True都可以 - FALSE #false,False都可以
float:- 3.14- 6.8523015e+5 #可以使用科学计数法
int:- 123- 0b1010_0111_0100_1010_1110 #二进制表示
null:nodeName: 'node'parent: ~ #使用~表示null
string:- 哈哈- 'Hello world' #可以使用双引号或者单引号包裹特殊字符- newlinenewline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
参考文档
在线验证工具 https://www.bejson.com/validators/yaml_editor/
转化工具jsontoyaml https://www.bejson.com/json/json2yaml/
https://zhuanlan.zhihu.com/p/644393484
https://blog.csdn.net/weixin_44896406/article/details/120916357
菜鸟教程 https://www.runoob.com/w3cnote/yaml-intro.html
yaml 引用语法 https://curder.github.io/yaml-study/guide/quote.html
相关文章:
yaml学习笔记
文章目录 yaml语言学习yaml 简介yaml 和json 区别基本语法数据类型YAML 对象YAML 数组锚点和引用纯量 参考文档 yaml语言学习 最近发现在学习k8s中各种配置文件 都是使用的yaml 这种格式, 包括 docker-compose.yaml 也都是用这个格式配置部署项目信息,我就了解了一下这个语法就…...

深度强化学习(王树森)笔记04
深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...
openssl3.2/test/certs - 074 - CT entry
文章目录 openssl3.2/test/certs - 074 - CT entry概述笔记setup074.shsetup074_sc1.shsetup074_sc2.shsetup074_sc3.shEND openssl3.2/test/certs - 074 - CT entry 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 setup074.sh #! /bin/bash# \file setup074.sh# o…...

Angular组件(一) 分割面板ShrinkSplitter
Angular组件(一) 分割面板ShrinkSplitter 前言 分割面板在日常开发中经常使用,可将一片区域,分割为可以拖拽整宽度或高度的两部分区域。模仿iview的分割面板组件,用angular实现该功能,支持拖拽和[(ngModel)]双向绑定的方式控制区…...
抖音详情API:视频内容获取与解析技巧
一、引言 抖音是一款广受欢迎的短视频分享平台,每天都有大量的用户在抖音上分享自己的生活点滴和创意作品。对于开发者而言,如何获取并解析抖音上的视频内容,是一项极具挑战性的任务。本文将详细介绍抖音详情API,以及如何使用它来…...
SpringBoot中实现阿里云OSS对象存储
背景 在业务中我们往往需要上传文件如图片,文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件…...

大型语言模型 (LLM)全解读
一、大型语言模型(Large Language Model)定义 大型语言模型 是一种深度学习算法,可以执行各种自然语言处理 (NLP) 任务。 大型语言模型底层使用多个转换器模型, 底层转换器是一组神经网络。 大型语言模型是使用海量数据集进行训练…...

Unity - gamma space下还原linear space效果
文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…...

Rabbitmq调用FeignClient接口失败
文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C…...

专业120+总分400+海南大学838信号与系统考研高分经验海大电子信息与通信
今年专业838信号与系统120,总分400,顺利上岸海南大学,这一年的复习起起伏伏,但是最后还是坚持下来的,吃过的苦都是值得,总结一下自己的复习经历,希望对大家复习有帮助。首先我想先强调一下专业课…...
如何区分 html 和 html5?
HTML(超文本标记语言)和HTML5在很多方面都存在显著的区别。HTML5是HTML的最新版本,引入了许多新的特性和元素,以支持更丰富的网页内容和更复杂的交互。以下是一些区分HTML和HTML5的关键点: 新特性与元素:H…...

Ps:将文件载入堆栈
Ps菜单:文件/脚本/将文件载入堆栈 Scripts/Load Files into Stack 将文件载入堆栈 Load Files into Stack脚本命令可用于将两个及以上的文件载入到同一个 Photoshop 新文档中。 载入的每个文件都将成为独立的图层,并使用其原始文件名作为图层名。 Photos…...

【格密码基础】:补充LWE问题
目录 一. LWE问题的鲁棒性 二. LWE其他分布选择 三. 推荐文献 四. 附密码学人心中的顶会 一. LWE问题的鲁棒性 robustness,翻译为鲁棒性 已有的论文表明,及时敌手获取到部分关于秘密和error的信息,LWE问题依旧是困难的,这能…...

【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
阅读导航 引言一、特殊类 --- 不能被拷贝的类1. C98方式:2. C11方式: 二、特殊类 --- 只能在堆上创建对象的类三、特殊类 --- 只能在栈上创建对象的类四、特殊类 --- 不能被继承的类1. C98方式2. C11方法 总结温馨提示 引言 在面向对象编程中࿰…...

VMware虚拟机部署Linux Ubuntu系统
本文介绍基于VMware Workstation Pro虚拟机软件,配置Linux Ubuntu操作系统环境的方法。 首先,我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是,VMware Workstation Pro软件是一个收费软件,而互联网中有很…...

RFID标签:数字时代的智能身份
在数字时代,RFID标签(Radio-Frequency Identification)成为物联网(IoT)中不可或缺的一环。作为一种小巧却功能强大的设备,RFID标签在各个领域的应用不断扩展,为我们的生活和工作带来了新的可能性…...
《动手学深度学习(PyTorch版)》笔记3.2
注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...

elasticsearch8.x版本docker部署说明
前提,当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点,每个节点启动两个es,用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…...
使用scyllaDb 或者cassandra存储聊天记录
一、使用scyllaDb的原因 目前开源的聊天软件主要还是使用mysql存储数据,数据量大的时候比较麻烦; 我打算使用scyllaDB存储用户的聊天记录,主要考虑的优点是: 1)方便后期线性扩展服务器; 2)p…...

Visual Studio如何修改成英文版
1、打开 Visual Studio Installer 2、点击修改 3、找到语言包,选择需要的语言包,而后点击修改 4、等待下载 5、 安装完成后启动Visual Studio 6、在工具-->选项-->环境-->区域设置-->English并确定 7、重启 Visual Studio,配置…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...