YAML语法介绍
1、YAML支持的三种数据结构:
(1).对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dict)
(2).数组:一组按次序排列的值,又称为序列/列表
(3).纯量:单个的,不可再分的值
2、对象
对象为一组键值对,使用冒号表示
key: value #值value与冒号之间必须要有空格
另一种写法,将所有键值对写成一个行内对象:
hash:{key1:value1 , key2:value2}
3、数组
一组连词线开头的行,构成一个数组【连词线指 -】
- cat
- dog
- pig
在python中写法为['cat','dog','pig']
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:
-
- cat
- dog
- pig
数组也可以采用行内表示法:
[ cat , dog ]
4、复合结构
对象和数组可以结合使用,形成复合结构
languages:
- ruby
- python
- shell
即在python中写法为{'languages':['rugy','python','shell']}
5、纯量
纯量是最基本的、不可再分的值。以下数据类型都属于JavaScript的纯量
字符串
布尔值
整数
浮点数
Null
时间
日期
number: 12.50
isSet: true
num: ~
iso8601: 2001-12-14t21:59:43.10-05:00
date: 2018-11-11
YAML允许使用两个感叹号,强制转换数据类型:
e: !!str 123 [数值123转换为字符串]
f: !!str true [布尔值true转为字符串]
转为JavaScript如下:
{e: '123' , f: 'true'}
6、字符串
字符串是最常见,也是最复杂的一种数据类型。字符串默认不使用引号表示。
(1)、str: 这是一行字符串
转为JavaScript如下:
{ste: '这是一行字符串'}
(2)、如果字符串之中包含空格或特殊字符,需要放在引号之中
str: 'AB: CDE'
转为JavaScript如下:
{str: 'AB: CDE'}
(3)、单引号和双引号都可以使用,但双引号不会对特殊字符转义
s1: '内容\n字符串'
s2: "内容\n字符串"
转为JavaScript如下:
{s1: '内容\\n字符串'} {s2: '内容\n字符串'}
(4)、单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'labor''s day'
转为JavaScript如下:
{str: 'labor's day'}
(5)、字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
str: 这是一段
多行
字符串
转为JavaScript如下:
{str: '这是一段 多行 字符串'}
(7)、多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行
this: |
Foo
Bar
that: >
Foo
Bar
转为JavaScript如下:
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
(8)、+表示保留文字块末尾的换行,-表示删除字符串末尾的换行
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
转为JavaScript如下:
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
(9)、字符串之中可以插入 HTML 标记
message: |
<p style="color: red">
段落
</p>
转为JavaScript如下:
{ message: '\n<p style="color: red">\n 段落\n</p>\n' }
7、引用
锚点 & 和别名 *,可以用来引用
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),<<表示合并到当前数据,*用来引用锚点
8、函数和正则表达式的转换
这是 JS-YAML 库特有的功能,可以把函数和正则表达式转为字符串
# example.yml
fn: function () { return 1 }
reg: /test/
解析上面的 yml 文件的代码如下:
var yaml = require('js-yaml');
var fs = require('fs');
try {
var doc = yaml.load(
fs.readFileSync('./example.yml', 'utf8')
);
console.log(doc);
} catch (e) {
console.log(e);
}
从 JavaScript 对象还原到 yaml 文件的代码如下:
var yaml = require('js-yaml');
var fs = require('fs');
var obj = {
fn: function () { return 1 },
reg: /test/
};
try {
fs.writeFileSync(
'./example.yml',
yaml.dump(obj),
'utf8'
);
} catch (e) {
console.log(e);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。