前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】YAML格式入门

【译】YAML格式入门

作者头像
用户2131907
发布2019-02-27 13:03:27
3K0
发布2019-02-27 13:03:27
举报

根据官方的YAML站点所述,YAML是面向所有编程语言的对人类友好的数据序列化标准。

尽管YAML格式可以描述复杂的嵌套数据结构,但是本章节只会描述使用YAML作为配置文件格式所需要的最小化的特性。

YAML是用于描述数据的一款简单的语言。对于PHP,它可以描述简单的数据类型如string,boolean,floats或者integer等。但是在数组(序列)和哈希(映射)上与PHP是不同的。

标量

标量数据类型语法与PHP语法类似。

字符串

在YAML中,字符串可以包含在单引号或者双引号之间,当然,有时也可以不用引号包含。

代码语言:javascript
复制
A string in YAML
'A singled-quoted string in YAML'
"A double-quoted string in YAML"

使用引号包含的样式在字符串内容的开始或者结束位置含有空格的情况下是非常有用的,因为对于不加引号的字符串来说,在解析它们的内容的时候,会去掉前后的空格。在字符串中包含特殊字符或者保留字符的情况下,需要使用引号包含。

在使用单引号'的情况下,内容中任何单引号必须使用两个单引号转义。

代码语言:javascript
复制
'A single quote '' inside a single-quoted string'

包含下列任意字符的字符串必须被引号包含。尽管你可以使用双引号",但是,对于下列这些字符来说,最好使用单引号',这样可以避免使用反斜线\ 对他们转义:

代码语言:javascript
复制
:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \`

双引号的样式提供了一种用于表述任意字符串的方式,通过使用\转义字符或者序列。例如,当需要嵌入一个\n或者Unicode字符时双引号是非常有用的。

代码语言:javascript
复制
"A double-quoted string in YAML\n"

如果字符串包含下列任意控制字符,必须使用双引号才能转义

代码语言:javascript
复制
\0, \x01, \x02, \x03, \x04, \x05, \x06, \a, \b, \t, \n, \v, \f, \r, \x0e, \x0f, \x10, \x11, \x12, \x13, \x14, \x15, \x16, \x17, \x18, \x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N, \_, \L, \P

最后,下列这些情况下,字符串必须使用引号包含:

  • 当字符串是true或者false时(否则会被认为是boolean值)
  • 当字符串是null或者~(否则会被认为是null)
  • 当字符串看起来是数字,例如整数(2, 14等),浮点数(2.6,14.9等),指数(12e7等)(否则它们会被认为是数字值)
  • 当字符串看起来是个日期(例如2014-12-31)(否则它们会被自动转义成UNIX时间戳)

当字符串包含换行的时候,可以使用字面值样式,管道符号(|)表明字符串将跨越多行,在字面值样式下,换行符被保留。

代码语言:javascript
复制
|
  \/ /| |\/| |
  / / | |  | |__

可选的,字符串也可以使用折叠样式,以>开始,接下来没一行都以空格开始。

代码语言:javascript
复制
>
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  without carriage returns.

注意,上述例子中,没一行都有两个空格,它们并不会在最终的结果中显示。

数字

代码语言:javascript
复制
# an integer
12

# an octal
014

# an hexadecimal
0xC

# a float
13.4

# an exponential number
1.2e+34

# infinity
.inf

Null

在YAML中,可以使用null或者~表示NULL。

Boolean

在YAML中,使用truefalse表示boolean值。

日期

YAML使用ISO-8601标准表示日期格式。

代码语言:javascript
复制
2001-12-14t21:59:43.10-05:00

# simple date
2002-12-14

集合

一个YAML文件很少只用来表述简单的标量类型数据。大多数时候,它会用来描述一个集合。集合可以是一个序列或者是元素的映射。在PHP数组中,序列和映射都存在。

序列使用-和一个空格开始

代码语言:javascript
复制
- PHP
- Perl
- Python

上述例子与下列PHP代码等价:

代码语言:javascript
复制
array('PHP', 'Perl', 'Python');

映射是使用:分隔的键值对

代码语言:javascript
复制
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20

上述与下面的PHP代码类似

代码语言:javascript
复制
array('PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20');

在映射中,key可以是任意合法的标量。

:和值之间的空格是任意的

代码语言:javascript
复制
PHP:    5.2
MySQL:  5.1
Apache: 2.2.20

YAML使用空格缩进描述嵌套的集合

代码语言:javascript
复制
"symfony 1.0":
  PHP:    5.0
  Propel: 1.2
"symfony 1.2":
  PHP:    5.2
  Propel: 1.3

下面的PHP代码与上述的YAML等价

代码语言:javascript
复制
array(
  'symfony 1.0' => array(
    'PHP'    => 5.0,
    'Propel' => 1.2,
  ),
  'symfony 1.2' => array(
    'PHP'    => 5.2,
    'Propel' => 1.3,
  ),
);

需要注意的是,在YAML文件中,必须使用一个或者多个空格进行缩进,而不能使用TAB制表符。

也可以嵌套使用序列或者映射

代码语言:javascript
复制
'Chapter 1':
  - Introduction
  - Event Types
'Chapter 2':
  - Introduction
  - Helpers

序列也可以使用方括号[]中逗号(,)分隔表示

代码语言:javascript
复制
[PHP, Perl, Python]

映射可以使用花括号{}中使用,分隔键值对

代码语言:javascript
复制
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }

你可以混合搭配各种样式实现更好的可读性

代码语言:javascript
复制
'Chapter 1': [Introduction, Event Types]
'Chapter 2': [Introduction, Helpers]

"symfony 1.0": { PHP: 5.0, Propel: 1.2 }
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }

注释

在YAML中使用#开始表示注释内容:

代码语言:javascript
复制
# Comment on a line
"symfony 1.0": { PHP: 5.0, Propel: 1.2 } # Comment at the end of a line
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }

YAML将会在解析的时候忽略注释,注释内容是不需要根据嵌套级别进行缩进的。

原文:The YAML Format

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标量
  • 字符串
  • 数字
  • Null
  • Boolean
  • 日期
  • 集合
  • 注释
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档