1   YAML简介

YAML,即YAML Ain’t Markup Language的缩写,YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

YAML的在线Demo这个YAML转化JSON网页中进行上手练习

2   YAML语法

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 禁止使用tab缩进,只能使用空格键
  4. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
  5. 使用#表示注释
  6. 字符串可以不用引号标注

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        "? " 问号+空格表示复杂的键

"? " 问号+空格表示复杂的键。当键是一个列表或键值表时,就需要使用本符号来标记。

  1. # 使用一个列表作为键
  2. ? [blue, reg, green]: Color
  3. # 等价于
  4. ? - blue
  5. - reg
  6. - gree
  7. : 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:

  1. - Ruby
  2. - Perl
  3. - Python

6. websites:

  1. YAML: yaml.org
  2. Ruby: ruby-lang.org
  3. Python: python.org
  4. Perl: use.perl.org

转为 JavaScript 如下。

  1. { languages: [ 'Ruby', 'Perl', 'Python' ],
  2. websites:
  3. { YAML: 'yaml.org',
  4. Ruby: 'ruby-lang.org',
  5. Python: 'python.org',
  6. Perl: 'use.perl.org' } }

4.4   
纯量

纯量是最基本的、不可再分的值。以下数据类型都属于纯量:


字符串


布尔值


整数


浮点数


Null


时间


日期

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        布尔值用truefalse表示。

NULL~表示。

4.5.9        锚点&和别名*,可以用来引用,定义数据的复用

第一步:使用 “&” 定义数据锚点(即要复制的数据)

第二步:使用 “*” 引用上述锚点数据(即数据的复制目的地)

2. defaults: &defaults

  1. adapter:  postgres
  2. host:     localhost

6. development:

  1. database: myapp_development
  2. <<: *defaults
  3. test:
  4. database: myapp_test
  5. <<: *defaults

等同于下面的代码。

2. defaults:

  1. adapter:  postgres
  2. host:     localhost

6. development:

  1. database: myapp_development
  2. adapter:  postgres
  3. host:     localhost
  4. test:
  5. database: myapp_test
  6. adapter:  postgres
  7. host:     localhost

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。

下面是另一个例子。

2. - &showell Steve

3. - Clark

4. - Brian

5. - Oren

6. - *showell

转为 JavaScript 代码如下。

  1. [ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

YAML详解的更多相关文章

  1. k8s之yaml详解

    k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...

  2. spring boot 配置文件properties和YAML详解

    spring boot 配置文件properties和YAML详解 properties中配置信息并获取值. 1:在application.properties配置文件中添加: 根据提示创建直接创建. ...

  3. kubernetes之kubectl与YAML详解1

    k8s集群的日志,带有组件的信息,多看日志. kubectl命令汇总 kubectl命令汇总 kubectl命令帮助信息 [root@mcwk8s04 ~]# kubectl -h kubectl c ...

  4. dart系列之:元世界pubspec.yaml文件详解

    目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结 简介 pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec.y ...

  5. Hyperledger Fabric 通道配置文件和容器环境变量详解

    摘要 Fabric 网络启动的过程中需要进行大量配置,新学时对各个配置的作用一无所知,这导致我曾在网络出问题时先对配置文件的内容进行排列组合后再祈祷它能在某个时刻顺利运行,因此掌握 fabric 各个 ...

  6. [Kubernetes]yaml文件详解

    应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...

  7. suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)

    不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...

  8. Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)

    简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...

  9. Kubernetes YAML 文件全字段详解

    Kubernetes YAML 文件全字段详解 Deployment yaml 其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样. apiVe ...

随机推荐

  1. Android 开发工具类 18_NetWorkUtil

    检测网络的一个工具包: 1.网络是否可用: 2.判断是否有网络连接: 3.判断 WIFI 网络是否可用: 4.判断 MOBILE 网络是否可用; 5.获取当前网络连接的类型信息: 6.获取当前的网络状 ...

  2. Solr 09 - SolrJ操作Solr单机服务 (Solr的Java API)

    目录 1 SolrJ是什么 2 SolrJ对索引的CRUD操作 2.1 创建Maven工程(打包方式选择为jar) 2.2 配置pom.xml文件, 加入SolrJ的依赖 2.3 添加和修改索引 2. ...

  3. 使用logdashboard查看可视化日志

    logdashboard 日志面板是我在Github写的一个开源项目,旨在让查看日志变的方便快捷.在线预览 现在功能有日志检索.趋势图.异常堆栈快速查看.日志详情等 logdashboard支持自定义 ...

  4. 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  5. 浅谈WPF中的MVVM框架--MVVMFoundation

    先科普一下:什么是WPF,请看下图 微软对于WPF技术的构想是很宏大的,可惜普及率不高,不过如果你要做Windows客户端开发的话WPF技术还是值得一学的. 什么是MVVM模式 简单来说它是一种高级的 ...

  6. 解读经典《C#高级编程》最全泛型协变逆变解读 页127-131.章4

    前言 本篇继续讲解泛型.上一篇讲解了泛型类的定义细节.本篇继续讲解泛型接口. 泛型接口 使用泛型可定义接口,即在接口中定义的方法可以带泛型参数.然后由继承接口的类实现泛型方法.用法和继承泛型类基本没有 ...

  7. rpm和yum软件管理(week2_day5)--技术流ken

    rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package ...

  8. pl/sql to_date

    to_date 函数:TO_DATE( string1 [, format_mask] [, nls_language] ) 后面两个函数为可选 ,意思将字符串类型转换为时间类型 , 可以自定义时间格 ...

  9. 为什么选择 Intellij IDEA 作为日常开发工具

    作为一个从事 Java 开发的程序员,每天离不开编辑器的帮助.还记得刚开始学习 Java 编程的时候,使用 Eclipse 作为日常开发工具.后来工作以后,需要使用 Intellij IDEA,刚开始 ...

  10. html/css的学习之路(1)

    HTML5简介:HTML5是什么?要回答这个问题,我们需要先了解一下HTML是什么.HTML的英文全称为Hyper Text Markup Language,即超文本标记语言.HTML5是HTML的一 ...