YAML 语言教程 | 阮一峰的网络日志

YAML Reference

YAML Tutorial | Tutorials Point

YAML (/ˈjæməl/)
YAML Ain't Markup Language

基础元素

对象

# 写法一
animal: pets
# { "animal": "pets"} # 写法二
hash: { name: Steve, foo: bar }
# { "hash": { "name": "Steve", "foo": "bar" } }
  • 注释中给出的是对应的 JSON 的写法

和 JSON 一样,整个 YAML 文件是一个对象

数组

# 写法一
- Cat
- Dog
- Goldfish
# [ "Cat", "Dog", "Goldfish" ] # 写法二
animal: [Cat, Dog]
# { "animal": [ "Cat", "Dog" ] }

纯量 (scalar)

最基本的、不可再分的值。

name: Steve  # 字符串
age: 18 # 整数
pi: 3.14 # 浮点数
isMale: true # 布尔值
isSingle: null # null,也可以写成 ~
birthday: 1999-12-31 # 日期,ISO 8601 格式
time: 12:00:00 # 时间,ISO 8601 格式

ISO 8601 格式:

  • 日期 YYYY-MM-DD
  • 时间 hh:mm:ss
  • 日期和时间 YYYY-MM-DDThh:mm:ss
  • 日期和时间,带时区 YYYY-MM-DDThh:mm:ss±hh:mm

2001-12-14t21:59:43.10-05:00 表示 2001 年 12 月 14 日 21 点 59 分 43.10 秒,美国东部时间 5 个小时以前。

强制类型转换

a: !!str 123  # 强制转换为字符串
b: !!int "123" # 强制转换为整数
c: !!float "123" # 强制转换为浮点数
d: !!bool "true" # 强制转换为布尔值

字符串

  • 字符串默认不使用引号表示,但是如果字符串中包含空格或特殊字符,就必须使用引号。
  • 单引号和双引号的区别在于:
    1. 双引号内部可以使用变量,单引号内部不能使用变量;
    2. 单引号不会对特殊字符进行转义,双引号会对特殊字符进行转义。
# 单引号不会转义特殊字符
s1: 'aaa\nbbb'
s2: "aaa\nbbb"
# { "s1": "aaa\\nbbb", "s2": "aaa\nbbb" } # 单引号中如果还有单引号,需要使用两个单引号表示
str: 'labor''s day'
# { 'str': 'labor\'s day' } # 字符串可以写成多行,后续行必须有一个单空格缩进。换行符会被转为空格
str: line1
line2
line3
# { "str": "line1 lin2 line3" } # 使用 | 保留换行符,> 折叠换行
s1: |
line1
line2
s2: >
line1
line2
# { "s1": "line1\nline2\n", "s2": "line1 line2\n" } # 使用 + 保留文字块末尾的换行,- 删除文字块末尾的换行
s1: |
Foo s2: |+
Foo s3: |-
Foo
# { "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

另一个例子

- &showell Steve
- Clark
- Brian
- Oren
- *showell
# [ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

函数和正则表达式的转换

JS-YAML 库特有的功能,可以把函数和正则表达式转为字符串。

example.yml

fn: function () { return 1 }
reg: /test/

解析上面的 yml 文件的代码如下:

const yaml = require('js-yaml');
const fs = require('fs'); try {
let doc = yaml.load(
fs.readFileSync('./example.yml', 'utf8')
);
console.log(doc);
} catch (e) {
console.log(e);
}

从 JavaScript 对象还原到 yml 文件的代码如下:

const yaml = require('js-yaml');
const fs = require('fs'); let obj = {
fn: function () { return 1 },
reg: /test/
}; try {
fs.writeFileSync('./example.yml', yaml.dump(obj), 'utf8');
} catch (e) {
console.log(e);
}

YAML 使用的更多相关文章

  1. C#与yaml解析

    YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...

  2. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  3. YAML 语法

    YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...

  4. golang使用yaml格式解析构建配置文件

    现在主流的配置文件格式有这么几种,xml.yaml.config…  xml就算了,太挫了,太土, 太繁琐… config 就是mysql,apache my.cnf的那种格式,这个格式适合功能分层, ...

  5. yaml

    YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...

  6. Cassandra 配制 cassandra.yaml

    一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...

  7. 雅美尓(yaml)实战

    献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...

  8. 用Yaml文件进行元素管理【转】

    原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...

  9. Java使用snakeyaml解析yaml

    YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...

  10. JSON+YAML初步学习+ciscoconfparse

    Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...

随机推荐

  1. tcp_tw_reuse、tcp_tw_recycle、tcp_fin_timeout参数介绍

    参数介绍 net.ipv4.tcp_tw_reuse = 1 表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭: net.ipv4.tcp_tw_rec ...

  2. B码对时方案,基于TI AM62x异构多核工业处理器实现!

    什么是IRIG-B码对时 IRIG-B(inter-range instrumentationgroup-B)码是一种时间同步标准,通常用于精确的时间测量和数据同步,广泛应用于电力.通信.航空等领域. ...

  3. 开发板测试手册——USB 4G 模块、GPS 定位功能操作步骤详解(3)

    目录 4 USB 4G 模块测试 41 4.1 网络功能测试 42 4.2 短信功能测试 43 4.3 GPS 定位功能测试 44 4.4 通话功能测试 45 4.5 测试程序编译 46 5 USB ...

  4. 移动web布局方法

    继续更新移动端的一个布局,这也是经典中的经典,当初只知道个rem和vwvh适配,其实这里面还有很多的门道不只是一个适配这么简单 一.前置 1.背景缩放 我们都知道做移动端,给的图都是二倍图,你拿来用直 ...

  5. 数据特征采样在 MySQL 同步一致性校验中的实践

    作者:vivo 互联网存储研发团队 - Shang Yongxing 本文介绍了当前DTS应用中,MySQL数据同步使用到的数据一致性校验工具,并对它的实现思路进行分享. 一.背景 在 MySQL 的 ...

  6. mobaXterm 查看密码

    参考:MobaXterm中密码的查看方式 检查是否把密码保存到了注册表中 然后从https://github.com/HyperSine/how-does-MobaXterm-encrypt-pass ...

  7. ComfyUI进阶篇:ComfyUI核心节点(四)

    ComfyUI核心节点(四) 前言: 学习ComfyUI是一场持久战.当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点.面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措. ...

  8. 新一代Java高性能构建工具Maven-mvnd【实践可行版】

    Maven-mvnd介绍 Maven 的优点是稳定可靠,在绝大多数的项目上工作良好,社区生态很完善,几乎所有的 Java 开发者都在用.Maven 的缺点是,对于大一点的项目来说,构建太慢了.有时候只 ...

  9. [oeasy]python0025_ 顺序执行过程_流水_流程_执行次序

    顺序执行过程_流水_流程_执行次序 回忆上次内容 上次 熟悉了 vim编辑器 操作 作用 w 向前移动光标一个word b 向后移动光标一个word :r oeasy.py 读取文件到当前文件缓存 g ...

  10. [oeasy]python0072_整数类型_int_integer_整型变量

    帮助手册 回忆上次内容   上次了解的是 字符串 字符串 就是 字符的串 字符串长度 可以用 len函数 字符可以用下标索引 []   可以用str 将整型数字 转化为 字符串   字符的长度本身 有 ...