yaml文件

yaml文件简介

YAML是一个可读性高,用来表达数据序列化的格式,YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。当前已经有多种编程语言或脚本语言支持(解析)这种语言。
yaml语言的设计目标,就是方便读写,实质上是一种通用的数据串行化格式。

基本语法规则

- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从#开始到行尾会被解析器忽略

支持的数据格式

 - 对象 
	即键值对的集合,也称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
 - 数组
 	 一组按次序排列的值,又称为序列(sequence) / 列表(list)
 - 纯量
 	单个的、不可再分的值

下面就分别详细介绍这三种数据格式。

对象

对象是键值对形式,使用冒号的结构来表示:

animal: cat

转为JavaScript如下:

{animal: 'cat'}

YAML也允许另一种写法:

animal: { name: cat, color: black }

转为JavaScript如下:

{ animal: { name: cat, color: black } }
数组

YAML文件中的数组是一组连词线开头的行,如:

- cat
- dog
- pig

转为JavaScript如下:

['cat', 'dog', 'pig']

若某个数据结构的子成员是一个数组,可以在该项的下面使用缩进来表示,如:

- animal
  - cat
  - dog
  - pig

转为JavaScript如下:

[['cat', 'dog', 'pig']]

数组也可以采用行内的表示方法:

animal: [cat, dog, pig]

转为JavaScript如下:

{animal: ['cat', 'dog', 'pig']}
复合结构

在YAML中,对象和数组可以结合使用,形成复合结构。

language:
  - python
  - go
  - java
networks:
  name: python.org
  url: http://x.x.x.x

转为JavaScript如下:

{language: ['python', 'go', 'java'],
 networks: 
  {name: 'python.org',
   url:  'http://x.x.x.x'}}
纯量

纯量是最基本、不可再分的值,主要有以下一些 :

- 字符串
- 布尔值
- 整数
- 浮点数
- NULL
- 时间
- 日期
  • 数值
    数值直接以字面量的形式表示

      number: 12.30
    

    转为JavaScript如下:

      {number: 12.30}
    
  • 布尔值
    布尔值有true和false两种,

      isFlag: ture
      isSet: false
    

    转为JavaScript如下:

      {isFlag: ture,
       isSet: false}
    
  • NULL
    YAML中,NULL用~表示

    tree: ~
    转为JavaScript如下:

      {tree: null}
    
  • 时间采用 ISO8601 格式

      iso8601: 2001-12-14t21:59:43.10-05:00
    

    转为 JavaScript 如下:

      { iso8601: new Date('2001-12-14t21:59:43.10-05:00') }
    
  • 日期
    日期采用复合 iso8601 格式的年、月、日表示。

      date: 1976-07-31
    

    转为 JavaScript 如下:

      { date: new Date('1976-07-31') }
    
  • 强制类型转换
    YAML 允许使用两个感叹号,强制转换数据类型

      e: !!str 123
      f: !!str true
    

    转为 JavaScript 如下:

      { e: '123', f: 'true' }
    
字符串

在YAML中,字符串默认不使用引号。

name: 这是一行字符串 

转为 JavaScript 如下:

{name: '这是一行字符串 '}

若字符串中包含空格或特殊字符,需要放在引号中

name: '内容: 字符串' 

转为 JavaScript 如下:

{name: '内容: 字符串'} 

单引号和双引号都可以使用,但双引号不会对特殊字符转义,单引号可以

s1: '内容\n字符串'
s2: "内容\n字符串"

转为 JavaScript 如下:

{ s1: '内容\\n字符串', s2: '内容\n字符串' }

单引号之中如果还有单引号,必须连续使用两个单引号转义

string: 'habor''s day'  

转为 JavaScript 如下:

{string: 'habor \'s day'}

字符串可以写成多行,从第二行开始,需要用一个单空格缩进。换行符会被转为空格。

str: 这是一段
	多行
	字符串

转为 JavaScript 如下:

{ str: '这是一段 多行 字符串' }

多行字符串可以使用|保留换行符,也可以使用>折叠换行

this: |
  Foo
  Bar
that: >
  Foo
  Bar

转为 JavaScript 如下:

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

+表示保留文字块末尾的换行,-表示删除字符串末尾的换行

s1: |
  Foo

s2: |+
  Foo


s3: |-
  Foo

转为 JavaScript 代码如下:

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
引用

锚点&和别名*,可以用来引用

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
   <<: *defaults

test:
  database: myapp_test
  <<: *defaults

等同于以下代码:

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值