欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

YAML 文件格式指南

最编程 2024-02-14 11:56:52
...

1、yaml简述

YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。

2、适用场景

2.1 脚本语言

由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 。除了Java 和 Go,其他都是脚本语言。

2.2序列化

YAML比较适合做序列化。因为它是宿主语言数据类型直转的。

2.3 配置文件

YAML做配置文件也不错。写YAML要比写XML快得多(无需关注标签或引号),并且比ini文档功能更强。

3、数据结构

YAML 认为数据由以下三种结构组成: 标量,序列,键值表。

标量:单个的、不可再分的值,如:数字,字符串

数组:一组按次序排列的值,如:python中的列表

键值表:键值对的集合,如:python中的字典

5、语法约定
  • 大小写敏感
  • '#'表示注释
  • 使用 Unicode 编码作为字符标准编码
  • 字符串默认不需要引号,如果字符串包含空格或者特殊字符(例如冒号),需要加引号
  • 使用缩进表示层级关系,缩进不允许使用tab,只允许空格,缩进的空格数不重要,只要相同层级的元素左对齐即可

6、格式规范

6.1 标量

integer: 12345                      # 整数标准形式

octal: 0o34                         # 八进制表示,以0o开头

hex: 0xFF                         # 十六进制表示,以0x开头

float: 1.23e+3                      # 浮点数

fixed: 13.67                        # 固定小数

minmin: -.inf                       # 表示负无穷

notNumber: .NaN                   # 无效数字

null:                              # 空值

boolean: [true, false]                 # 布尔值

string: '12345'                      # 字符串

date: 2015-08-23                    # 日期

datetime: 2015-08-23T02:02:00.1z      # 日期时间

iso8601: 2015-08-23t21:59:43.10-05:00  # iso8601 日期格式

6.2 数组

  • 使用“-”(横线)+单个空格表示单个列表项
  • 使用"[]"表示一组数据,一组数据用”,”隔开,”[“,”]”,逗号前后有无空格都可以
  • 组合表示。每个结构都可以嵌套组成复杂的表示结构。

 

6.3 键值表

  • 使用 “:”(冒号) + 空格表示单个键值对
  • 使用"{}"表示一个键值表,一组数据用”,”隔开,”[“,”]”,逗号前后有无空格都可以
  • 组合表示。每个结构都可以嵌套组成复杂的表示结构。

 

6.4 文本块

  • 使用定界符“”(双引号)、‘’(单引号)和回车表示的块:最终表示成一行,双引号不对特殊字符进行转义。
  • 使用 “|” 和文本内容缩进表示的块:保留块中已有的回车换行。
  • 使用 “>” 和文本内容缩进表示的块:将块中回车替换为空格,最终连接成一行。

6.5 “!”

  • 显式指示类型,或自定义类型标识。
  • 单叹号通常是自定义类型,双叹号是内置类型

!!int               # 整数类型

!!float             # 浮点类型

!!bool              # 布尔类型

!!str               # 字符串类型

!!binary            # 也是字符串类型

!!timestamp         # 日期时间类型

!!null              # 空值

!!set               # 集合

!!omap, !!pairs     # 键值列表或对象列表

!!seq               # 序列,也是列表

!!map               # 键值表

6.6 锚点与引用

  • 使用 “&” 定义数据锚点(即要复制的数据)
  • 使用 “*” 引用上述锚点数据(即数据的复制目的地)

7、YAML 组织结构

YAML 文件可以由一或多个文档组成(也即相对独立的组织结构组成),文档间使用“---”(三个横线)在每文档开始作为分隔符。同时,文档也可以使用“...”(三个点号)作为结束符(可选)。

  • 如果只是单个文档,分隔符“---”可省略。
  • 每个文档并不需要使用结束符“...”来表示结束,但是对于网络传输或者流来说,作为明确结束的符号,有利于软件处理。

8、拓展
  • YAML 与 XML

具有 XML 同样的优点,但比 XML 更加简单、敏捷等

  • YAML 与 JSON
  • JSON 可以看作是 YAML 的子集,也就是说 JSON 能够做的事情
  • YAML 也能够做,YAML 能表示得比 JSON 更加简单和阅读,例如“字符串不需要引号”。所以 YAML 容易可以写成 JSON 的格式,但并不建议这种做
  • YAML 能够描述比 JSON 更加复杂的结构,例如“关系锚点”可以表示数据引用(如重复数据的引用)。