YAML详解
1 YAML简介
YAML,即YAML Ain’t Markup Language的缩写,YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。
YAML的在线Demo这个YAML转化JSON网页中进行上手练习
2 YAML语法
- 大小写敏感
- 使用缩进表示层级关系
- 禁止使用tab缩进,只能使用空格键
- 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
- 使用#表示注释
- 字符串可以不用引号标注
3 YAML 组织结构
YAML 文件可以由一或多个文档组成(也即相对独立的组织结构组成),文档间使用“---”(三个横线)在每文档开始作为分隔符。同时,文档也可以使用“...”(三个点号)作为结束符(可选)。如果只是单个文档,分隔符“---”可省略。
4 YAML数据结构
YAML 支持的数据结构有三种:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
4.1 对象
4.1.1 使用 “:”(冒号) + 空格表示单个键值对
对象的一组键值对,使用 “:”(冒号) + 空格表示单个键值对,格式为key: value。冒号后面要加一个空格
key: value
可以使用缩进表示层级关系;
key:
child-key: value
child-key2: value2
key: {child-key: value, child-key2: value2}
4.1.2 使用"{}"表示一个键值表
items: {no: 1234, descript: cpu, price: ¥800.00}
4.1.3 "? " 问号+空格表示复杂的键
"? " 问号+空格表示复杂的键。当键是一个列表或键值表时,就需要使用本符号来标记。
- # 使用一个列表作为键
- ? [blue, reg, green]: Color
- # 等价于
- ? - blue
- - reg
- - gree
- : Color
4.2
数组
使用一个短横线加一个空格代表一个数组项:
hobby:
- Java
- LOL
当然也可以有这样的写法:
-
- Java
- LOL
可以简单理解为:[[Java,LOL]]
数组的理解:
PaymentDetail:
- billPaymentNo: "201904171022507929513877465876"
- paymentAmount: 1000.00
- paymentMethod1: "ODD"
- paymentSuccessDate: 2019-04-17 13:00:00
转为json如下:
PaymentDetail:[{billPaymentNo: '201904171022507929513877465876' },{paymentAmount: 1000 },{paymentMethod1: 'ODD' },{paymentSuccessDate: Wed Apr 17 2019 21:00:00 GMT+0800 (China Standard Time)}]
理解为:PaymentDetail值为一个列表,列表中有四个元素,其中每个元素都是一个字典,每个字典中只有一个键值对
PaymentDetail1:
- billPaymentNo: "201904171022507929513877465876"
paymentAmount: 1000.00
paymentMethod1: "ODD"
paymentSuccessDate: 2019-04-17 13:00:00
转为json如下:
PaymentDetail1: [{billPaymentNo:'201904171022507929513877465876',paymentAmount: 1000, paymentMethod1: 'ODD',paymentSuccessDate: Wed Apr 17 2019 21:00:00 GMT+0800 (China Standard Time)}]
理解为:PaymentDetail1值为一个列表,列表中只有一个元素,该元素为一个字典,字典由多个键值对构成
4.3
复合结构
对象和数组可以结合使用,形成复合结构。
2. languages:
- - Ruby
- - Perl
- - Python
6. websites:
- YAML: yaml.org
- Ruby: ruby-lang.org
- Python: python.org
- Perl: use.perl.org
转为 JavaScript 如下。
- { languages: [ 'Ruby', 'Perl', 'Python' ],
- websites:
- { YAML: 'yaml.org',
- Ruby: 'ruby-lang.org',
- Python: 'python.org',
- Perl: 'use.perl.org' } }
4.4
纯量
纯量是最基本的、不可再分的值。以下数据类型都属于纯量:
l
字符串
l
布尔值
l
整数
l
浮点数
l
Null
l
时间
l
日期
4.5
特殊用法
4.5.1
!! YAML中使用!!做类型强行转换:
yamlbeans包一般用!(单叹号)做类型转换,snakeyaml包一般用!!(双叹号)做类型转换
string:
- !!str 54321
- !!str true
相当于把数字和布尔类型强转为字符串。当然允许转型的类型很多,比如:
--- !!set
- Mark McGwire: 65
- Sammy Sosa: 63
- Sammy Sosa: 63
- Ken Griffy: 58
将数组解析为set,转化的内容就是:[{Ken Griffy=58}, {Mark McGwire=65}, {Sammy Sosa=63}],重复的Sammy Sosa去掉;
4.5.2 字符串默认不使用引号表示。
str: 这是一行字符串
4.5.3 字符串之中包含空格或特殊字符,需要放在引号之中
如果字符串之中包含空格或特殊字符,需要放在引号之中。单引号和双引号都可以使用
str: '内容: 字符串'
4.5.4 双引号不会对特殊字符转义。
s1: '内容\n字符串'
s2: "内容\n字符串"
4.5.5 单引号之中如果还有单引号,必须连续使用两个单引号转义。
str: 'labor''s day'
4.5.6 多行字符串可以使用|保留换行符,也可以使用>折叠换行。
this: |
Foo
Bar
that: >
Foo
Bar
转为 JavaScript 代码如下:
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
4.5.7 +表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
转为 JavaScript 代码如下。
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
4.5.8 布尔值用true和false表示。
NULL用~表示。
4.5.9 锚点&和别名*,可以用来引用,定义数据的复用
第一步:使用 “&” 定义数据锚点(即要复制的数据)
第二步:使用 “*” 引用上述锚点数据(即数据的复制目的地)
2. defaults: &defaults
- adapter: postgres
- host: localhost
6. development:
- database: myapp_development
- <<: *defaults
- test:
- database: myapp_test
- <<: *defaults
等同于下面的代码。
2. defaults:
- adapter: postgres
- host: localhost
6. development:
- database: myapp_development
- adapter: postgres
- host: localhost
- test:
- database: myapp_test
- adapter: postgres
- host: localhost
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。
下面是另一个例子。
2. - &showell Steve
3. - Clark
4. - Brian
5. - Oren
6. - *showell
转为 JavaScript 代码如下。
- [ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
YAML详解的更多相关文章
- k8s之yaml详解
k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...
- spring boot 配置文件properties和YAML详解
spring boot 配置文件properties和YAML详解 properties中配置信息并获取值. 1:在application.properties配置文件中添加: 根据提示创建直接创建. ...
- kubernetes之kubectl与YAML详解1
k8s集群的日志,带有组件的信息,多看日志. kubectl命令汇总 kubectl命令汇总 kubectl命令帮助信息 [root@mcwk8s04 ~]# kubectl -h kubectl c ...
- dart系列之:元世界pubspec.yaml文件详解
目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结 简介 pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec.y ...
- Hyperledger Fabric 通道配置文件和容器环境变量详解
摘要 Fabric 网络启动的过程中需要进行大量配置,新学时对各个配置的作用一无所知,这导致我曾在网络出问题时先对配置文件的内容进行排列组合后再祈祷它能在某个时刻顺利运行,因此掌握 fabric 各个 ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
- suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)
不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...
- Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)
简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...
- Kubernetes YAML 文件全字段详解
Kubernetes YAML 文件全字段详解 Deployment yaml 其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样. apiVe ...
随机推荐
- 如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
- Kafka并不难学
1.为什么写这本书? 我建立了一个qq群,有很多人在群里面学习和交流,经常有人问我一些Kafka的知识,我可以感受他们对技术的热情,这是一群刚走出校门,或者工作经验较少,又或是一些转型的开发新人,他们 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- REST API设计指导——译自Microsoft REST API Guidelines(一)
前言 前面我们说了,有章可循,有据可依,有正确的产品流程和规范,我们的工作才不至于产生混乱,团队的工作才能更有成效.我们经常见到,程序开发可能只用了半个月,但是接口的联调却经常需要花费半个月甚至一个月 ...
- Docker入门(一)用hello world入门docker
初识Docker Docker是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量 ...
- C# winform在关闭窗体的时候及时释放内存问题
winform中如果每次打开的窗体都是通过new出来的,发现几次过后就会出现提示”内存不足“问题,那么在关闭窗体的时候怎么处理可以及时释放内存?dispose方法可能也无法解决这个问题.我们可以每次在 ...
- [PHP] pow指数运算函数与二进制
1.a的-2次方=(a分之一)的2次方2.-a的2次方 3次方 按照这个规则,负负得正,负正得负,正正得正,指数是偶数最终结果是正的,是奇数就是负的3.二进制转换十进制,0b开头是二进制 <?p ...
- java集合架构
Collection接口 与 Map接口 1 .collection接口 特点:元素是 无序可重复的集合,无索引的,元素是单例值 子类 :set接口 list接口 1.1 set接口 特点: ...
- sql server去掉某个字段前后空格问题
数据通过页面表单保存到数据库,由于有个选项是一个树形的下拉框,导致保存的这个字段的数据前面有空格,在sql server中可以使用 SELECT LTRIM(RTRIM(BelongPartyCode ...
- MySQL基础、主从复制、优化
MySQL apache公司 开源共享 免费 mysql [-hlocalhost] -uroot -p 以超级管理员的身份登录 use demo; 查看 DCL(数据库控制语言): DDL(数据库定 ...