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 区别

  1. yaml 中 可以添加注释的.json 是不支持添加注释
  2. 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

分享快乐,留住感动. '2024-01-25 20:27:31' --frank

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

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

相关文章

字符串随机生成工具(开源)-Kimen(奇门)

由于最近笔者在开发数据脱敏相关功能&#xff0c;其中一类脱敏需求为能够按照指定的格式随机生成一个字符串来代替原有信息&#xff0c;数据看起来格式需要与原数据相同&#xff0c;如&#xff1a;电话号码&#xff0c;身份证号以及邮箱等。在网上搜索了下&#xff0c;发现没有…

【新书推荐】3.5 char类型

本节必须掌握的知识点&#xff1a; 示例十 代码分析 汇编解析 3.5.1 示例十 char类型是比较古怪的&#xff0c;int\short\long类型如果在使用时不指定signed还是unsigned时都默认是signed&#xff0c;但char不一样&#xff0c;编译器可以实现为带符号的&#xff0c;也可以实现…

洛谷B3621枚举元组

枚举元组 题目描述 n n n 元组是指由 n n n 个元素组成的序列。例如 ( 1 , 1 , 2 ) (1,1,2) (1,1,2) 是一个三元组、 ( 233 , 254 , 277 , 123 ) (233,254,277,123) (233,254,277,123) 是一个四元组。 给定 n n n 和 k k k&#xff0c;请按字典序输出全体 n n n 元组&am…

Flink实现数据写入MySQL

先准备一个文件里面数据有&#xff1a; a, 1547718199, 1000000 b, 1547718200, 1000000 c, 1547718201, 1000000 d, 1547718202, 1000000 e, 1547718203, 1000000 f, 1547718204, 1000000 g, 1547718205, 1000000 h, 1547718210, 1000000 i, 1547718210, 1000000 j, 154771821…

【QT】文件目录操作

目录 1 文件目录操作相关的类 2 实例概述 2.1 实例功能 2.2 信号发射者信息的获取 3 QCoreApplication类 4 QFile类 5 QFilelnfo类 6 QDir类 7 QTemporaryDir和QTemporaryFiIe 8 QFiIeSystemWatcher类 文件的读写是很多应用程序具有的功能&#xff0c;甚至某些应用程序就是围绕…

C语言赋值表达式中什么是左值和右值?数组名作为左右值时又具有怎样的意义?

一、问题 赋值表达式中可以分为左值和右值&#xff0c;那么什么是左值和右值&#xff1f;数组名做为左右值时又具有怎样的意义&#xff1f; 二、解答 在C语言中&#xff0c;左值和右值的概念对于理解赋值表达式以及程序的正确性非常重要&#xff1a; 1、左值 • 左值是一个…

内存管理(mmu)/内存分配原理/多级页表

1.为什么要做内存管理&#xff1f; 随着进程对内存需求的扩大&#xff0c;和同时调度的进程增加&#xff0c;内存是比较瓶颈的资源&#xff0c;如何更好的高效的利于存储资源是一个重要问题。 这个内存管理的需求也是慢慢发展而来&#xff0c;早期总线上的master是直接使用物…

Oracle篇—分区索引的重建和管理(第三篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

ES的一些名称和概念总结

概念 先看看ElasticSearch的整体架构&#xff1a; 一个 ES Index 在集群模式下&#xff0c;有多个 Node &#xff08;节点&#xff09;组成。每个节点就是 ES 的Instance (实例)。每个节点上会有多个 shard &#xff08;分片&#xff09;&#xff0c; P1 P2 是主分片, R1 R2…

达梦数据库——记录一次离谱的登录失败报错

好久没更新了哇 前面有整理过一些常见的数据库登录失败问题哈&#xff0c;今天记录一个遇到概率比较小&#xff0c;但碰上了一般不太容易找到原因的登录失败问题。 今天给客户同时初始化了三台服务器数据库&#xff0c;惟独这一台死活登不进去&#xff0c;满脑子问号&#xf…

【论文解读】Object Goal Navigation usingGoal-Oriented Semantic Exploration

论文&#xff1a;https://devendrachaplot.github.io/papers/semantic-exploration.pdf 代码&#xff1a;https://github.com/devendrachaplot/Object-Goal-Navigation 项目&#xff1a; Object Goal Navigation using Goal-Oriented Semantic Exploration example&#xff1…

代码随想录算法训练60 | 单调栈part03

84.柱状图中最大的矩形 代码随想录 今天是训练营最后一天&#xff0c;恭喜坚持两个月的录友们&#xff0c;接下来可以写一篇自己 代码随想录一刷的总结。好好回顾一下&#xff0c;这两个月自己的博客内容&#xff0c;以及自己的收获。

2、鼠标事件、键盘事件、浏览器事件、监听事件、冒泡事件、默认事件、属性操作

一、鼠标事件 1、单击事件&#xff1a;onclick <body><header id"head">我是头部标签</header> </body> <script> var head document.getElementById("head")head.onclick function () {console.log("我是鼠标单击…

金蝶云星空--写插件不重启IIS热更新简单配置指南

云星空7.5版本&#xff0c;以简单方式配置并测试了热更新的实现方式可行&#xff0c;操作如下&#xff08;7.5外版本没试过&#xff0c;大家可试下&#xff09;&#xff1a; 1、打开WebSite\App_Data\Common.config&#xff0c;修改appSettings&#xff0c;设置IsEnablePlugIn…

go slice 扩容实现

基于 Go 1.19。 go 的切片我们都知道可以自动地进行扩容&#xff0c;具体来说就是在切片的容量容纳不下新的元素的时候&#xff0c; 底层会帮我们为切片的底层数组分配更大的内存空间&#xff0c;然后把旧的切片的底层数组指针指向新的内存中&#xff1a; 目前网上一些关于扩容…

ElasticSearch 开发总结(九)——SearchType:DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH

ElasticSearch 开发总结&#xff08;九&#xff09;——SearchType&#xff1a;DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH-CSDN博客 1.SearchType ES的搜索类型 有一个类SearchType&#xff08;如下图示&#xff09;&#xff0c;关于该类的描述&#xff1a; Search type repre…

redis源码之:clion搭建cluster环境

cluster集群通常每个node节点都是一主N从的模式&#xff0c;此处为简化环境搭建&#xff0c;所有node节点均只有一个主节点。 在clion环境中&#xff0c;为方便debug&#xff0c;需要通过配置多个cmake application实现redis-server、redis-cli等源码debug模式启动。 一、配置…

费曼学习法 - 理工科的学习利器

费曼学习法是以物理学家理查德费曼&#xff08;Richard Feynman&#xff09;命名的一种高效的学习方法。它旨在帮助你深入理解复杂概念&#xff0c;并能够用简单的语言解释它们。费曼学习法是一个学习框架&#xff0c;能够帮你对给定主题进行深入理解&#xff0c;包含以下4个简…

【算法专题】动态规划之子序列问题

动态规划5.0 动态规划 - - - 子序列问题&#xff08;数组中不连续的一段&#xff09;1. 最长递增子序列2. 摆动序列3. 最长递增子序列的个数4. 最长数对链5. 最长定差子序列6. 最长的斐波那契子序列的长度7. 最长等差数列8. 等差数列划分Ⅱ - 子序列 动态规划 - - - 子序列问题…

HTML-表单

表单 概念&#xff1a;一个包含交互的区域&#xff0c;用于收集用户提供的数据。 1.基本结构 示例代码&#xff1a; <form action"https://www.baidu.com/s" target"_blank" method"get"><input type"text" name"wd&q…