YAML 入门教程

引言

在软件开发和配置管理领域,我们经常需要一种方式来表示和存储数据。这些数据可能是配置参数、文档结构或者是其他形式的结构化信息。YAML(Yet Another Markup Language)就是这样一种被广泛使用的数据序列化语言,它提供了一种简洁而强大的方式来表示这些数据。本文将带你深入了解 YAML 的基本语法和特性。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

YAML 的配置文件后缀为 .yml,如:application.yml 。

一、 基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • 数据类型

二、YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

三、YAML 的基础

YAML 是一种人类友好的数据序列化标准,它的设计目标就是“可读性好”和“易于编写”。它使用类似于缩进和缩写的自然语言语法来表示数据,这使得它非常适合用于配置文件和文档。

1. 基本结构

YAML 的基本结构包括键值对(key-value pairs)和列表(lists)。键和值之间使用冒号(:)分隔,而列表则使用破折号(-)表示。

# 键值对示例  
name: John Doe  
age: 30  
  
# 列表示例  
fruits:  
  - apple  
  - banana  
  - cherry

2. 缩进

YAML 使用缩进来表示数据的层次结构。通常,我们使用两个空格来表示一个缩进级别。不一致的缩进会导致解析错误。

# 正确的缩进  
address:  
  street: 123 Main St  
  city: Anytown  
  state: CA  

# 错误的缩进  
address:  
  street: 123 Main St  
   city: Anytown  # 注意这里只有一个空格的缩进  
  state: CA

三、YAML 的高级特性

除了基本结构外,YAML 还提供了一些高级特性,如锚点(anchors)和引用(aliases)、注释、流样式(flow style)和块样式(block style)等。

1. 锚点和引用

YAML 支持通过锚点和引用来复用数据块。这可以在大型配置文件中节省大量的重复内容。

defaults: &defaults  
  adapter:  postgres  
  host:     localhost  
  
development:  
  database: myapp_development  
  <<: *defaults

在上述示例中,<<: *defaults 表示将 defaults 锚点的内容合并到 development 节点中。

2. 注释

YAML 支持使用井号(#)来表示注释。注释可以放在一行的开始,或者跟在键值对或列表项之后。

# 这是一个注释  
name: John Doe # 这也是一个注释

3. 流样式和块样式

YAML 支持两种表示列表和键值对的样式:流样式(紧凑的、内联的)和块样式(展开的、多行的)。

流样式:


fruits: [apple, banana, cherry]

块样式(默认):


fruits:  
  - apple  
  - banana  
  - cherry

一个相对复杂的例子:

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。

数组也可以使用流式(flow)的方式表示:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

4.复合结构

数组和对象可以构成复合结构,例:

languages:
  - Ruby
  - Perl
  - Python 
websites:
  YAML: yaml.org 
  Ruby: ruby-lang.org 
  Python: python.org 
  Perl: use.perl.org

转换为 json 为:

{ 
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值