Yaml详解,比Json更易读的文本数据格式

2025博客之星年度评选已开启 10w+人浏览 1.6k人参与

大家好,欢迎来到停止重构的频道。

本期介绍Yaml

Yaml跟Json一样,是一种文本数据格式,常用于配置文件,比如K8S的配置、SpringBoot的配置等。

一般情况下,Yaml和Json可以表达相同的树形结构数据,也就是他们一般是可以相互转换的。

相对于Json,Yaml拥有更强的可读性,Json通过{}、[]表示层级关系Yaml则采用换行、缩进表示层级关系

整体上,Yaml更加简洁、易读,可以简单地理解为 Yaml是Json的易读增强版。

以下详细内容是基于Json做对比讲解的,所以在继续了解下面内容之前,请先确保已经对Json有所了解

如果你能清晰地理解这样的Json例子,则不需要翻看往期《Json详解》。

以下基于Yaml1.2版本介绍。

1.2版本发布于2009年,目前几乎所有的Yaml解析器都基于这个版本进行解析的。

提纲

我们按以下顺序展开:

  1. 对象、数组
  2. 字符串
  3. 数字、布尔值、null
  4. 其他类型及tag标签
  5. 注释和空行
  6. 锚点/引用
  7. 多文档

对象、数组

先介绍对象、数组的变化。

Json的对象是通过"{}"包裹的,Yaml则采用换行/缩进进行标识的

图中nested这个key对应的值为对象。

YAML只需要换行,且key 1/key 2前面拥有一样数量的空格即可,也就是一样空格数量前缀的行会被认为是同一层级的对象

值得一提的是,Yaml的缩进是只允许使用空格的,不支持tab制表符。

但是你会发现,在VSCode等代码编辑器中使用tab键缩进是没问题的,因为VSCode这些代码编辑器,会强制将tab键的输入改为两个或4个空格。

Yaml对象中的键值对采用": "分割,也就是":"后必须加一个空格。

Json的数组是由"[]"包裹,Yaml的数组是采用换行/缩进进行标识,每个数组元素需要以"- "开头

如果数组元素是对象,则如图所示,注意用空格对齐对象中key的缩进。

以上是Yaml推荐的对象/数组设置方式,如果你就是要插入Json格式数据,Yaml也是支持的,但必须是一行内写完

字符串

接下来介绍字符串。

Json是要求字符串必须由""包裹的,但是,Yaml则不要求必须使用""包裹字符串

Json字符串中的双引号需要转义,Yaml字符串中的双引号则不需要转义。

如果字符串以空格开头或空格结尾,Yaml字符串需要用""或者''包裹,也就是""或者''包裹的部分会强制认为是字符串

""和''的区别

双引号是会转义的,等效Json的双引号,\n会转义为换行符。

而单引号是不会转义的,\n不会转义为换行符。

对于多行字符串,Json只能通过\n标识换行,Yaml则支持换行字符串

Yaml用"|"标识多行字符串。多行字符串是以第一行的空格前缀作为对齐的,所以第二行会认为前面有1个空格。

如果第一行的前面需要有空格的话,则需要在"|"后标识缩进的空格数。

如果不希望最后一行换行的话,则需要在"|"后增加"-"标识。

若希望将多行字符串的换行替换为空格,可以采用">"代替"|"。

数字、布尔值、null

接下来是常规的数字、布尔值、null类型数据这部分相对于Json没有多大的变化

数字就是普通的数字,直接设置就可以了。

布尔值除了Json支持的小写true/false,Yaml还支持大写的TRUE/FALSE。

null除了可以设置为null,还可以设置为~。

其他类型及tag标签

除了以上6种Json也支持的基础数据类型。

YAML还支持一些特殊的类型,比如时间类型、二进制类型等,这些特殊类型数据是无法转换为Json数据的。

其中,二进制类型数据的!!binary是用于指定类型的tag标签。

类似的,Yaml中可以使用tag标签指定值类型,一些解析器可能会有自定义的特殊值类型,不过这个知道就行了,一般是用不上的。

注释和空行

Json是不支持注释的,只能通过加额外的key达到类似于注释的作用。

Yaml支持通过"#"添加注释的,"#"开头的内容会被认为是注释。

与Json一样,Yaml中的空行是会被忽略的,不会影响到解析。

锚点/引用

在Json中,若有一段重复的数据,你只能写多次。

但是Yaml中,是允许只写一次,别的地方可以重复引用的。也就是定义锚点,然后再多处引用锚点。

但是这种节省数据重复填写的方式并不都是好的,在数据结构复杂,且定义了多个锚点后,是非常难以阅读的。

多文档

最后是Yaml的多文档,一个Json文件只能是一个数据结构。

但是Yaml是允许一个文件中设置多个数据结构的采用---分隔多个文档

但是吧,不太常用,因为某个数据太长的话,可能很难分清楚哪里跟哪里是一个文档,所以很多软件对Yaml配置文件的支持,会屏蔽掉这个功能。

总结

以上就是Yaml的介绍,它相对于Json更易读,主要优点是使用换行/缩进代替Json的{}/[],让内容更加紧凑。

当然,Json也不是一无是处,虽然Yaml更易读,但同时也会有很多限制和多余语法。

而Json却极致简单,极容易理解,普及度会更高。

比如Python的标准库是含有Json解析器的,但是不包含Yaml的解析器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

停止重构

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

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

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

打赏作者

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

抵扣说明:

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

余额充值