js-yaml:github.com/nodeca/js-y…
基本介绍
YAML语言是一种通用的数据串行化格式。
语法规则
-
大小写敏感
-
使用缩进表示层级关系
-
缩进时不允许使用Tab键,只允许使用空格。
-
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
-
#表示注释,从这个字符一直到行尾,都会被解析器忽略。
数据结构
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值,如js的
字符串/布尔值/整数/浮点数/Null/时间/日期
基本使用
# 对象,冒号结构表示
animal : pets
hash : {name : rabbit, age : 22}
# 数组,通过一组减号开头
- dog
- cat
- chicken
# 数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
-
- dog
- cat
- chicken
# 也可以使用对象,键值对
animal : [cat, dog]
# 纯量类似与原子变量,属于不可再分的值
number: 12.12
isRight: true
# null 使用“~” || null表示
isNull: ~
# 字符串,yml中字符串是比较复杂的
str: yaml字符串
# 多行字符串可以使用|保留换行符,也可以使用>折叠换行
# >其实也就是将块中回车替换为空格,最终连接成一行
this: |
Foo
Bar
that: >
Foo
Bar
# 结果:{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
# +表示保留文字块末尾的换行,-表示删除字符串末尾的换行
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
# 结果:{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
# 使用 & 定义数据锚点(即要复制的数据),使用 * 引用锚点数据(即数据的复制目的地)
name: &a yaml
book: *a
books:
- java
- *a
- python
# 结果 books为 [java,yaml,python]
优点
- YAML的可读性好。
- YAML和脚本语言的交互性好。
- YAML使用实现语言的数据类型。
- YAML有一个一致的信息模型。
- YAML易于实现。
- YAML可以基于流来处理; 【具有xml优点】
- YAML表达能力强,扩展性好。【具有xml优点】
JSON与YAML
JSON首先是一种机器交换格式。在API接口的调用,或者是跨程序语言间的数据交换,总之只要是机器生成交换数据,那就没有YAML这种扩展语言出场的意义,都是标准化JSON直接搞定。
写json多了,总体感觉json还不错,毕竟能够直接被js解析,很多编程语言的标准库都支持 JSON。现在几乎所有的工具都提供 JSON 支持,包括语法突出显示、自动格式化、验证工具等。
YAML(YAML 不是标记语言)是一种非常灵活的格式,几乎是 JSON 的超集,已经被用在一些著名的项目中,如 Travis CI、Circle CI 和 AWS CloudFormation。YAML 的库几乎和 JSON 一样无处不在。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。
参考:www.lucidchart.com/techblog/20…