YAML 使用
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" # 强制转换为布尔值
字符串
- 字符串默认不使用引号表示,但是如果字符串中包含空格或特殊字符,就必须使用引号。
- 单引号和双引号的区别在于:
- 双引号内部可以使用变量,单引号内部不能使用变量;
- 单引号不会对特殊字符进行转义,双引号会对特殊字符进行转义。
# 单引号不会转义特殊字符
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 使用的更多相关文章
- C#与yaml解析
YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...
- SpringBoot中yaml配置对象
转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...
- YAML 语法
YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...
- golang使用yaml格式解析构建配置文件
现在主流的配置文件格式有这么几种,xml.yaml.config… xml就算了,太挫了,太土, 太繁琐… config 就是mysql,apache my.cnf的那种格式,这个格式适合功能分层, ...
- yaml
YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...
- Cassandra 配制 cassandra.yaml
一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...
- 雅美尓(yaml)实战
献给跟我一样对yaml(雅美尓)有婶婶挫败感的同学! 开始第一个pylon工程,我们就跟yaml配置文件开始了不解之缘.yaml是什么?它有哪些规则? 大IBM的文章如是说:YAML 是一种比 XML ...
- 用Yaml文件进行元素管理【转】
原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...
- Java使用snakeyaml解析yaml
YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...
- JSON+YAML初步学习+ciscoconfparse
Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...
随机推荐
- Python_9 py文件导入和路径处理
一.查缺补漏 Python中两个值交换可以直接交换如:a,b=b,a 冒泡就是从小到大排序,因为越到后越大 自动导包也适用于自己创建的模块 关于正斜杠和反斜杠https://www.cnblogs.c ...
- linux scp自动填充密码脚本
在linux上使用scp命令传输文件时,每传输一次,都要填写目标服务器的登录密码,十分麻烦. 配置系统密钥又比较复杂,于是想到的使用expect写一个自动填充密码的脚本,脚本内容如下: scp.sh ...
- IDEA之NexChatGPT插件【工欲善其事必先利其器】
国内有热心的程序员开发了一款NexChatGPT插件,安装后开箱即用十分方便,打字机展示的效果也很流畅,另外插件内还外链了国内能直接访问的ChatGPT,非常推荐试一下,IDEA插件NexChatGP ...
- Vscode控制台乱码的最终解决方案
Vscode控制台乱码的最终解决方案 vscode运行项目时控制台打印日志乱码.网上也有许多解决办法. 方法一[管用]推荐,避免过多设置 Java项目时,像Springboot微服务项目默认使用的是l ...
- MYSQL DQL in 到底会不会走索引&in 范围查询引发的思考。
前情引子 in 会不会走索引?很多人肯定会回答.废话.如果命中了索引.那肯定会走. 其实我和大多数人一样.一开始也是这么想的.直至有一个血淋淋的案子让我有所改观.有所思考. 背景介绍 业务的工单表.我 ...
- 基于 Three.js 的 3D 模型加载优化
作者:来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失.为了提升首 ...
- [rCore学习笔记 015]特权级机制
写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 官方文 ...
- ComfyUI进阶:Comfyroll插件 (五)
ComfyUI进阶:Comfyroll插件 (五) 前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业 ...
- 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文介绍Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书,如需要了解Halo 2的安装,参考如何在Linux云服务器上通过Docker Compose部署安装Halo, ...
- 【Maxwell】03 定向监听&全量输出
一.定向监听 定向监听,即只监听某一个特定的表,或者库 1.创建样本案例 -- 创建监听的库(演示样本) CREATE DATABASE `test-db-2` CHARACTER SET 'utf8 ...