YAML基础使用教程(单引号和双引号的区别)


一、YAML 简介

YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

YAML 是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件。

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

二、基本语法

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进不允许使用tab,只允许空格
  4. 缩进的空格数不重要,只要相同层级的元素左对齐即可
  5. ‘#’ 表示注释

三、数据类型

YAML 支持以下三种数据类型:

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

1.对象

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

YAML 为对象提供了 2 种写法:

  1. 普通写法,使用缩进表示对象与属性的层级关系:
redis:
  host: 192.168.1.111
  port: 6379
  password: 123456
  1. 行内写法:
redis: {host: 192.168.1.111,port: 6379,password: 123456}

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

?  
  - complexkey1
  - complexkey2
: 
  - complexvalue1
  - complexvalue2

即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

2.数组

YAML 使用 “-” 表示数组中的元素,也有两种写法:

  1. 普通写法如下:
persons:
  - zhangsan
  - lisi
  - wangwu
  1. 行内写法:
persons: [zhangsan,lisi,wangwu]

3.纯量

纯量是最基本的,不可再分的值,包括字符串、布尔值、整数、浮点数、Null、时间、日期。

  1. 字符串
string:
    - 你好
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格

默认情况下字符串不需要使用单引号或双引号:

name: zhangsan

若字符串使用单引号,则会转义特殊字符:

name: 'zhangsan \n lisi'

输出结果为:

zhangsan \n lisi

若字符串使用双引号,则不会转义特殊字符,特殊字符会输出为其本身想表达的含义

name: "zhangsan \n lisi"

输出结果为:

zhangsan 
lisi
  1. 布尔值
boolean: 
    - TRUE  #true,True 都可以
    - FALSE  #false,False 都可以
  1. 整数
int:
    - 123
    -  0b1010_0111_0100_1010_1110    #二进制表示
  1. 浮点数
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
  1. Null
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
  1. 时间
datetime: 
    -  2022-04-28T12:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
  1. 日期
date:
    - 2022-04-28    #日期必须使用ISO 8601格式,即yyyy-MM-dd

4.复合结构

以上三种数据结构可以任意组合使用,构成复合结构,以实现不同的用户需求,例:

persons:
  - zhangsan
  - lisi
  - wangwu
redis:
  host: 192.168.1.111
  port: 6379
  password: 123456

5.引用

当 YAML 文件中出现多个重复内容时,可以通过 锚点& 与引用* 实现引用锚点处内容的功能,从而在修改时,只需要修改锚点处的内容,即可在所有引用处生效。

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。
有两种方式实现,通过 << 符号 和 不通过 << 符号。

  1. 通过 << 符号
defaults: &defaults
  host:  192.168.1.111
  port:  6379

dev:
  database: dev_db
  <<: *defaults

prod:
  database: prod_db
  <<: *defaults

相当于:

defaults: 
  host:  192.168.1.111
  port:  6379
  
dev:
  database: dev_db
  host:  192.168.1.111
  port:  6379

prod:
  database: prod_db
  host:  192.168.1.111
  port:  6379
  1. 不通过 << 符号
    直接在键后设置锚点,然后空格设置值,这样在引用时,只引用值,而键名可以自己设置,不用和锚点一致:
defaults: 
  host:  &host 192.168.1.111
  port:  &port 6379
  
dev:
  database: dev_db
  host:  *host
  port:  *port

prod:
  database: prod_db
  host:  *host
  port:  *port
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
YAMLYAML Ain't Markup Language)和 JSON(JavaScript Object Notation)都是用于数据序列化和交换的格式,但它们在使用场景上有一些区别YAML 的主要特点是易读性和易写性,它使用缩进和减少的标点符号来表示数据结构,使得 YAML 文件更具可读性。因此,YAML 更适合用于配置文件、人类可读的数据格式、文档等场景。它常用于各种编程语言中的配置文件,例如 Python 中的 `pip` 和 `docker-compose` 的配置文件。 下面是一个使用 YAML 格式表示的示例: ```yaml # YAML 示例 name: John Doe age: 30 city: New York ``` 相比之下,JSON 是一种更为紧凑和简洁的数据格式,使用大括号和方括号来表示对象和数组。JSON 更适合用于数据交换和与外部系统进行通信的场景。它在 Web 开发中被广泛使用,特别是在前后端之间传递数据。 下面是一个使用 JSON 格式表示的示例: ```json // JSON 示例 { "name": "John Doe", "age": 30, "city": "New York" } ``` 需要注意的是,JSON 是一种严格的数据格式,对于键名、字符串必须使用双引号,而 YAML 则允许使用单引号或不使用引号。此外,JSON 支持的数据类型相对较少,而 YAML 支持更多的数据类型,如日期、正则表达式等。 综上所述,YAML 适用于配置文件和易读性要求较高的场景,而 JSON 则适用于数据交换和与外部系统进行通信的场景。具体使用哪种格式取决于你的需求和使用环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑吧邓邓子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值