其他 - YAML 入门
概述
- 简单介绍 YAML 语言
背景
- 很多地方, 都在使用 YAML
- k8s
- spring
- 其他
- 很多地方, 都在使用 YAML
准备
验证工具
- YAML、YML在线格式化校验工具
一个 YAML 转换 JSON 的工具
- 通常来说, YAML 是可以转化为 JSON 的
- 有一个能告诉你对错的验证工具, 对学习很有帮助
这里如果使用 广告屏蔽插件的化, 背景会变得不太好看
- 处理办法, 是把 body 元素里的 style 属性去掉即可
- YAML、YML在线格式化校验工具
JSON 的基础
- 起码知道 map, list 的表示
1. YAML
概述
- 简述 YAML 相关
什么是 YAML
- YAML ain't markup language
- YAML 不是标记语言
- 这个玩法, 和 gnu 有点类似...
- YAML ain't markup language
目的
- 一门 可读性好 的语言
- 一门可以作为 数据序列化标准 的语言
- 一门 跨平台 的语言
和 JSON 的关系
- JSON 更加注重 跨平台, YAML 更重视可读
- YAML 可以视为 JSON 的超集
- JSON 的格式, 在 YAML 中合法
后缀名到底是 .YAML 还是 .yml
- 都行
- 推荐使用 .YAML
2. 语法
- 概述
- 简单介绍 YAML 语法
1. 普通文本
概述
- 尝试输入普通文本
例子
# 输入
1
2
3 4
# 转换
'1 2 3\n4'
我的想法
- 虽然转换成功, 但是不建议使用
- 为啥非要用 YAML 来存放普通文本呢
- 虽然转换成功, 但是不建议使用
2. 注释
概述
- YAML 的注释
注释格式
开始
- 以 # 开头
位置
- 行首
- 整行都被视为注释
- 行中
- 符号 # 右侧的字符, 被视为注释
- 行首
格式
- 符号 # 和注释内容之间, 需要 空格 隔开
约定
- 我在后面整理中, 不会在 YAML 里添加任何注释
- 下文中的 # 只是用来分隔的 解释说明文字
3. 简单 map
- 概述
- 简单 map
例子1: kv 分隔符
示例
# 输入
1:1
# 输出
61
结果
- 卧槽怎么是这个东西?
原因
: 格式有问题
可用的格式, 有这两种
# 官网推荐这一种, : 紧跟key, 但是在 value 前面, 有一个空格
1: 1
2 : 2
后面一定注意, YAML 其实 很吃 格式
- 格式很重要
修正
# 输入
1: 1
# 输出, 这就对了嘛
{ '1': 1 }
例子2: 简单的 map
示例
# 输入
1: 10
abandon: 狂热
# 输出
{ '1': 10, abandon: '狂热' }
结果
- 数字 和 字母都能作为 key
- 而且比起 JSON, YAML 的格式好像更为简单
- 起码 '' 的使用, 没有那么复杂
- 而且比起 JSON, YAML 的格式好像更为简单
- 数字 和 字母都能作为 key
其他注意的问题
概述
- 一些其他的注意事项
- 本来想 举例子 来说, 但还是太懒了
字符集
- YAML 支持 unicode 的所有可见字符集
特殊字符
- 如果需要 #, :, 则可以用 '' 或者 "" 引用, 保证使用正常
- 那个转化器, 无法识别 "", 这个暂时没法验证
- 如果需要 #, :, 则可以用 '' 或者 "" 引用, 保证使用正常
key 不能重复
- 重复的 key, 会导致 解析失败
key 不能为空
- 否则会导致 解析失败
- 单纯的 空格 和 tab 也不行
- 空字符串, 倒是没问题
- 否则会导致 解析失败
value 可以为空
- 转换出来的 JSON, 会识别为 null
- 如果是文字 null, 则加上 ''
数字值域
使用 11111111111111111111 做 键 时
- 转化后的 键 为 11111111111111110000
- 不知道是因为解析器使用 js 的原因, 还是其他原因
在使用数字的时候, 要有意识的去注意 值域
bool
- YAML 支持 bool 类型
- true, True
- false, False
- YAML 支持 bool 类型
4. 简单 list
- 概述
- 简单 list
例子1: 简单 list
示例
# 输入
-
- ' '
- ' '
- 1
- abandon
# 输出
[ null, ' ', '\t', 1, 'abandon' ]
结果
- 值可以为空
- 空格 和 tab 必须用 '' 或者 ""
- 否则视为 null
- 和 值 之间, 必须要有 空格
- 友情提示: 注意对齐, 后面的缩进, 会有大麻烦
5. 嵌套
- 概述
- 尝试一些相对复杂的嵌套
例子1: map 嵌套
示例
# 输入
key1:
key11: value11
key12: value12
key2:
key11: value11
key12: value12
# 输出
{ key1: { key11: 'value11', key12: 'value12' },
key2: { key21: 'value21', key22: 'value22' } }
结果
- map 可以作为 value
注意
缩进
- YAML 中, 层次是靠 缩进 体现的
- 缩进使用的, 是 两个空格
- 一定不能用 tab 去缩进
- 缩进不正确, 会导致报错
当然, 可以多层嵌套
- 但具体能嵌套多少层, 我也是不清楚
例子2: list 嵌套
示例
# 输入
- super1
-
- sub1
- sub2
- super3
# 输出
[ 'super1', [ 'sub1', 'sub2' ], 'super3' ]
结果
- list 可以作为 list 元素存在
- 那个空行 - 需要注意
- list 可以作为 list 元素存在
注意
- 还是缩进
- 层数
- 可以多层嵌套
- 但是能套多少层, 我还是不清楚
例子3: list 做 map 的 key
示例
# 输入
?
- var1
- var2
:
key
# 输出
{ 'var1,var2': 'key' }
结果
- list 作为 map 的 key, 成功转化
注意
- 注意格式
- ?
- :
- map 不能作为 map 的 key
- 注意格式
例子4: list 作为 map 的 value
示例
# 输入
key:
- value1
- value2
# 输出
{ key: [ 'value1', 'value2' ] }
结果
- 成功
例子5: map 作为 list 的元素
示例
# 输入
- key10: value10
key11: value11
- key20: value20
key21: value21
# 输出
[ { key10: 'value10', key11: 'value11' },
{ key20: 'value20', key21: 'value21' } ]
结果
- 成功嵌套
6. 其他
感觉了解了这些, 基本就够用了吧
- 感觉日常使用, 基本是 够了
当然有一些疑问
- 层数上限
- 容量上限
- int 和 float 的上限
- 特殊转义
- " 和 ' 的区别
这些问题, 如果在使用中遇到, 再去处理吧
感觉 YAML 其实是一种 写起来更简单的 JSON
- 如果有想法的话, 其实是可以写一个东西, 来将 YAML 转化为 JSON 的
ps
其他 - YAML 入门的更多相关文章
- YAML入门
概要 YAML(是YAML Ain't Markup Language的缩写,尾音的发音类似Camel)是一种序列化数据的语言(类似json, xml),使用轻量高可读性的语法描述list, dict ...
- 04 . kubernetes资源清单YAML入门
YAML 通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船 yam是专门用来写配置文件的语言,非常简洁和强大.而实际上使用yaml配置文件创建 ...
- YAML简要入门
这是一篇简单的YAML入门教程,目的是让你知晓什么YAML,以及YAML的基础语法.方便接下来学习如何使用Golang解析YAML.如果想获得更多YAML的知识,请查看http://yaml.org ...
- YAML 语言教程(转载)
用YAML语言读取配置是最快的,之前的suricata中用yaml读取了配置,并且在代码运行期间,对配置进行了维护,所以抽点时间,来了解一下YAML语言编程,下文虽然对YAML语言和JAVAScrip ...
- python基础知识-day9(数据驱动)
1.数据驱动的概念 在自动化测试中,需要把测试的数据分离到JSON,YAML等文件中. 2.YAML 的相关知识 YAML 入门教程 分类 编程技术 YAML 是 "YAML Ain't a ...
- SpringBoot 配置文件使用详解
一.创建一个SpringBoot项目 创建 SprintBoot 项目的 2 种方式: 在 https://start.spring.io/ 上创建一个 SpringBoot 项目,然后导入到 IDE ...
- YAML快速入门
https://www.jianshu.com/p/97222440cd08 我们学习Java,都是先介绍properties文件,使用properties文件配合Properties对象能够很方便的 ...
- [转帖] YAML 快速入门
https://www.jianshu.com/p/97222440cd08 原始文档更加易读. YAML快速入门 叩丁狼教育 关注 2018.02.18 19:19* 字数 1776 阅读 876评 ...
- YAML文件格式入门
YAML快速入门 https://www.jianshu.com/p/97222440cd08 https://yaml.org/spec/1.2/spec.pdf http://nodeca.git ...
随机推荐
- python—lambda函数,三个常用的高阶函数
"""lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...
- JavaScript自学笔记(3)--- 用JS来实现网页浮窗
最近做个小项目,给网页加个浮窗,考验了基础的css,js技术,还是蛮有意思的,代码如下(部分代码来源于引用,见底部) <!DOCTYPE html> <html> <he ...
- Spring的BeanFactory和FactoryBean
官方定义 BeanFactory:Spring Bean容器的根接口 FactoryBean:各个对象的工厂接口,如果bean实现了这个接口,它将被用作对象的工厂,而不是直接作为bean实例. 源码解 ...
- cisco 添加静态路由
静态路由:由人,手动写出的路由条目就叫静态路由,永久有效,优先级最高,效率最高. 路由器是干啥的? 连接不同地址段的网络.屏蔽不同地址段的网络广播. 路由器有多个接口,至少得有2个吧,一边一个局域网. ...
- Spring MVC 定时任务注解说明
一.注解说明. Spring 自带的定时任务执行@Scheduled注解,可以定时的.周期性的执行一些任务.查看@Scheduled的注解可以看到有以下三种: 1.1 String cron() de ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model
Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时 ...
- 数据库中间件DBLE学习(一) 基础介绍和快速搭建
dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...
- @Autowired、@Resource、@Qualifier区别
@Autowired 1.属于spring的注解,如果不想和Spring耦合的太紧,就不推荐使用. 2.默认情况下,要求依赖对象必须存在,不能为null.如果允许为空,那么设置属性值required为 ...
- PAT (Basic Level) Practice (中文)1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...
- ASP.NET MVC中ActionResult的不同返回方式
1.返回视图 return View();//返回方法名对应的视图 return View("aaa");//返回名称为aaa的视图 2.返回文本内容 return Content ...