当前位置: 首页 > ds >正文

十分钟快速掌握 YML YAML 文件

YML(YAML)(YAML Ain’t Markup Language) 作为一种数据序列化格式,因其简洁、易读和强大的表达能力,被广泛应用于各种场景,如Docker Compose、Kubernetes、CI/CD工具(如GitLab CI)、Spring Boot配置等。

1. 什么是YML?

YML是YAML的缩写,是一种人类可读的数据序列化语言。它旨在以一种简洁、直观的方式表示数据结构,如列表、映射和标量值。YML文件通常以.yml.yaml为扩展名。

核心特点:

  • 简洁易读:使用缩进和冒号表示结构,避免了XML或JSON中的冗余符号。
  • 支持多种数据类型:包括字符串、数字、布尔值、列表、映射等。
  • 跨语言支持:大多数编程语言都有YML解析库。

2. 基本语法规则

YML的语法规则非常简单,但有几个关键点需要注意:

2.1 缩进
  • YML使用缩进来表示层级关系,不能使用Tab键,必须使用空格
  • 同一级别的元素必须左对齐,缩进数量决定层级。
  • 示例:
    person:name: Aliceage: 30hobbies:- reading- hiking
    
    这里,nameage缩进2个空格,hobbies下的readinghiking缩进4个空格。
2.2 键值对
  • 使用冒号:分隔键和值,冒号后必须有一个空格。
  • 示例:
    key: value
    name: John Doe
    
2.3 注释
  • 使用#添加单行注释。
  • 示例:
    # 这是一个注释
    name: Alice  # 这也是注释
    

3. 数据类型详解

3.1 标量(Scalar)

标量是最基本的数据类型,包括字符串、数字、布尔值等。

  • 字符串

    • 可以不加引号,也可以使用单引号'或双引号"
    • 双引号支持转义字符(如\n),单引号不支持。
    • 示例:
      string1: Hello World
      string2: 'Hello World'
      string3: "Hello\nWorld"  # 换行
      
  • 数字

    • 整数、浮点数、科学计数法。
    • 示例:
      integer: 42
      float: 3.14
      scientific: 1.23e4
      
  • 布尔值

    • 使用truefalse
    • 示例:
      active: true
      debug: false
      
  • null

    • 表示空值,使用null~
    • 示例:
      name: null
      age: ~
      
3.2 列表(Sequence)

列表是一组有序的值,使用短横线-表示。

  • 基本列表

    fruits:- apple- banana- orange
    
  • 嵌套列表

    matrix:- - 1- 2- - 3- 4
    
  • 内联列表(使用方括号):

    colors: [red, green, blue]
    
3.3 映射(Mapping)

映射是键值对的集合,类似于JSON对象。

  • 基本映射

    person:name: Aliceage: 30city: Beijing
    
  • 内联映射(使用花括号):

    person: {name: Alice, age: 30}
    
3.4 复合结构

YML支持复杂的嵌套结构。

  • 列表中的映射

    users:- name: Aliceage: 30- name: Bobage: 25
    
  • 映射中的列表

    company:name: Tech Corpemployees:- Alice- Bob
    

4. 高级特性

4.1 多行字符串

YML支持多行字符串,使用|(保留换行)或>(折叠换行)。

  • 保留换行(|

    description: |This is a multi-linestring that preservesline breaks.
    
  • 折叠换行(>

    summary: >This is a multi-linestring that will befolded into a single line.
    
4.2 引用与锚点

使用&定义锚点,*引用锚点,避免重复。

  • 示例
    defaults: &defaultsport: 8080host: localhostservice1:<<: *defaultsname: Service Aservice2:<<: *defaultsname: Service Bport: 9090  # 覆盖默认端口
    
4.3 合并键(<<

用于合并映射,常与锚点结合使用。


5. 常见应用场景

5.1 Docker Compose
version: '3'
services:web:image: nginx:latestports:- "80:80"db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: password
5.2 Kubernetes
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: nginximage: nginx:1.14.2
5.3 Spring Boot配置
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: password

6. 注意事项

  1. 缩进一致性:确保缩进正确,否则会导致解析错误。
  2. 冒号后空格:键和值之间必须有一个空格。
  3. 避免Tab:始终使用空格,不要用Tab。
  4. 大小写敏感:YML是大小写敏感的。
http://www.xdnf.cn/news/19567.html

相关文章:

  • 07.《交换机三层功能、单臂路由与端口安全基础知识》
  • 在Linux环境安装Maven(保姆级别)
  • leetcode 面试题 01.01.判定字符是否唯一
  • 【高级】系统架构师 | 信息系统基础
  • 基于Seurat的空转单样本数据分析流程学习(一)
  • JavaScript中的XMLHttpRequest对象分析
  • 基于单片机智能保温杯/智能水杯
  • Java基础第7天总结(代码块、内部类、函数式编程)
  • 【多模态】使用LLM生成html图表
  • 打开多个Excel文件后快速关闭所有的文档,并且退出Excel应用
  • s[:] = reversed(s) 和 s = reversed(s)的区别
  • 【Proteus仿真】点亮小灯系列仿真——小灯闪烁/流水灯/交通灯
  • R3:适用于 .NET 的新一代响应式扩展库,事件订阅流
  • TFS-2002《Fuzzy Clustering With Viewpoints》
  • 嵌入式ARM程序高级调试技能:19.qumu arm elf无法生成coredump
  • 接口测试:如何定位BUG的产生原因
  • nginx-增加VTS模块
  • 数据结构八股
  • 数据结构(C语言篇):(八)栈
  • vscode+EIDE+Clangd环境导入keil C51以及MDK工程
  • shell脚本第六阶段---三剑客之sed
  • C++日志系统:高效异步日志实现解析
  • LeetCode 36. 有效的数独 - 解题思路与实现详解
  • ans.1中的对象标识符OBJECT_IDENTIFIER----OID
  • 【机器学习基础】决策树算法原理及其在无人驾驶技术中的应用
  • Matplotlib:让数据在Python中跳舞的魔法画笔![特殊字符]
  • 基于FPGA的正弦波和及滤波(已通过仿真和上板)
  • 如何确定虚拟机的IP
  • DVWA靶场通关笔记-SQL Injection (Impossible级别)
  • [ Android Audio 篇 ] 高通平台 Android AudioRecord 多通道录音