最近看到越来越多的 YAML 的东西,所以打算看下 YAML 语法。
介绍
官网直接强调了 YAML Ain’t Markup Language (YAML 不是标记语言),YAML 是人类友好的数据序列化对所有编程语言标准。简单说就是类似 JSON 这种数据序列化后的字符。
数据类型
集合类型
- map 无序的 key:value 对,不允许重复。
- omap 有序的 key:value 对,不允许重复。
- pairs 有序的 key:value 对,允许重复。
- set 无序集不等值的。
- seq 任意值的序列
基本类型
- bool 布尔型
- float 浮点型
- int 整型
- null null
- str 字符串
- timestamp 时间戳
- merge 指定一个或多个映射到与当前被合并。
- yaml 自定义类型
- value 定义默认值 (JS-YAML 不支持)
- binary Base64数据 (JS-YAML 不支持)
JS-YAML 扩展类型
- !!js/regexp 正则表达式
- !!js/undefined undefined
- !!js/function 函数
具体请参考 Language-Independent Types for YAML。
语法
除了数据类型,还有几个简单的语法。
空格 使用空格缩进来表示结构,不能使用 TAB
— 文件开始 (可有可无)
… 文件结束 (可有可无)
# 注释
| 字符串保留换行
> 字符串折叠换行
额,,符号比较多,还是直接看例子算了。。
1 | list: # 我是注释 |
输出
1 | { list: |
可以看到 !!str
强制使用字符串后,他就不会转义为日期对象了,否则就是日期对象。
上面列出来的 数据类型
在适当的时候用,可以控制我们生成的数据类型。
还有 | 和 > 的区别,就是是否保留行内的换行。
另外还有一个坑,当你的字符串里出现了 :
或者字符串前后需要保留空格,就需要使用 “ 或 ‘ 来防止错误和保留前后的空格。
1 | str: ' str:str ' |
好了,更多奇葩的用法还是自己去测试吧。
JS-YAML
JS-YAML 是 js 的 YAML 解析插件,你可以直接在 JS-YAML demo 页面测试以上例子。
结束语
整体来说,YAML 也比较简单而且类型丰富,学学也无妨,技多不压身嘛。