YAML语法详解

文章目录

    • [YAML 语法详解](#YAML 语法详解)
      • [一、YAML 简介](#一、YAML 简介)
      • 二、基本语法规则
        • [1. **大小写敏感**](#1. 大小写敏感)
        • [2. **使用缩进表示层级关系**](#2. 使用缩进表示层级关系)
        • [3. **注释**](#3. 注释)
      • 三、数据结构
        • [1. **标量(Scalars)**](#1. 标量(Scalars))
        • [2. **字符串特殊表示**](#2. 字符串特殊表示)
        • [3. **序列(列表/数组)**](#3. 序列(列表/数组))
        • [4. **映射(对象/字典)**](#4. 映射(对象/字典))
      • 四、复杂结构示例
        • [1. **嵌套结构**](#1. 嵌套结构)
        • [2. **锚点和别名(& 和 *)**](#2. 锚点和别名(& 和 *))
      • 五、高级特性
        • [1. **多文档支持**](#1. 多文档支持)
        • [2. **数据类型标识**](#2. 数据类型标识)
        • [3. **复杂键**](#3. 复杂键)
      • 六、实际应用示例
        • [1. **配置文件**](#1. 配置文件)
        • [2. **Docker Compose**](#2. Docker Compose)
      • 七、最佳实践
      • 八、常见工具
      • 九、注意事项

YAML 语法详解

一、YAML 简介

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换。

二、基本语法规则

1. 大小写敏感
yaml 复制代码
name: John  # 正确
Name: John  # 被视为不同的键
2. 使用缩进表示层级关系
  • 使用空格缩进(通常2个或4个空格)
  • 禁止使用制表符(Tab)
yaml 复制代码
person:
  name: John
  address:
    city: Beijing
    zip: 100000
3. 注释

使用 # 开头

yaml 复制代码
# 这是注释
name: John  # 行内注释

三、数据结构

1. 标量(Scalars)

基本数据类型:

yaml 复制代码
string: "Hello World"  # 字符串
string2: Hello World   # 引号可选
integer: 123          # 整数
float: 3.14           # 浮点数
boolean: true         # 布尔值
null: null            # 空值
date: 2024-01-15      # 日期
2. 字符串特殊表示
yaml 复制代码
# 多行字符串
description: |
  这是第一行
  这是第二行
  保留换行符

# 折叠多行字符串
summary: >
  这是第一行
  这是第二行
  转换为空格

# 保留换行和缩进
text: |2
   第一行
   第二行  # 保留2空格缩进
3. 序列(列表/数组)

使用短横线 - 表示:

yaml 复制代码
fruits:
  - Apple
  - Banana
  - Orange

# 行内表示
colors: [red, green, blue]
4. 映射(对象/字典)

使用键值对:

yaml 复制代码
person:
  name: John Doe
  age: 30
  married: false

# 行内表示
person: {name: John, age: 30}

四、复杂结构示例

1. 嵌套结构
yaml 复制代码
# 对象中包含数组
company:
  name: Tech Corp
  employees:
    - name: Alice
      department: Engineering
    - name: Bob
      department: Sales

# 数组中包含对象
servers:
  - host: server1
    port: 8080
  - host: server2
    port: 8081
2. *锚点和别名(& 和

用于复用数据:

yaml 复制代码
defaults: &default_settings
  host: localhost
  port: 3306
  timeout: 30

development:
  <<: *default_settings
  database: dev_db

production:
  <<: *default_settings
  host: prod-server
  database: prod_db

五、高级特性

1. 多文档支持

--- 分隔文档,... 结束文档:

yaml 复制代码
---
# 文档1
name: Document 1
---
# 文档2
name: Document 2
...
2. 数据类型标识
yaml 复制代码
# 强制类型转换
string_int: !!str 123      # 转为字符串 "123"
int_string: !!int "456"    # 转为整数 456
binary: !!binary |         # 二进制数据
  SGVsbG8gV29ybGQ=
3. 复杂键

使用 ? 表示复杂键:

yaml 复制代码
# 键本身是复杂结构
? - name
  - age
: value

# 或使用引号
"complex.key": value

六、实际应用示例

1. 配置文件
yaml 复制代码
# application.yaml
server:
  port: 8080
  ssl:
    enabled: true
    key-path: /path/to/key.pem

database:
  connection:
    host: localhost
    port: 5432
    username: ${DB_USER}
    password: ${DB_PASS}

logging:
  level:
    root: INFO
    com.example: DEBUG
2. Docker Compose
yaml 复制代码
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80
  
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret

七、最佳实践

  1. 一致性:统一使用2或4个空格缩进
  2. 可读性:复杂结构适当换行
  3. 验证:使用YAML验证工具检查语法
  4. 避免复杂:避免过度复杂的嵌套结构
  5. 敏感信息:不要在YAML中直接存储密码等敏感信息

八、常见工具

  • 验证工具:yamllint、在线验证器
  • 解析库
    • Python:PyYAML、ruamel.yaml
    • JavaScript:js-yaml
    • Java:SnakeYAML
    • Go:go-yaml

九、注意事项

  1. YAML 1.2 不再支持一些1.1的特性(如布尔值简写)
  2. 某些实现可能不支持所有高级特性
  3. 注意特殊字符的转义

YAML以其简洁的语法和良好的可读性,成为现代软件开发中广泛使用的配置格式,特别是在容器编排、CI/CD配置和应用程序设置中。


结束语

Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

相关推荐
Trouvaille ~1 天前
【C++篇】C++11新特性详解(一):基础特性与类的增强
c++·stl·c++11·类和对象·语法·默认成员函数·初始化列表
艺杯羹7 天前
掌握Spring Boot配置艺术:从YAML基础到实战进阶
java·spring boot·后端·yaml
gis分享者8 天前
如何在 Shell 脚本中如何使用条件判断语句?(中等)
面试·shell·脚本·语法·使用·判断·条件
Mysticbinary10 天前
原始类型与泛型对比笔记
语法
缘三水16 天前
【C语言】17.字符函数和字符串函数
c语言·开发语言·语法
小李不困还能学17 天前
markdown语法以及快捷键大全
markdown·语法
缘三水18 天前
【C语言】16.指针(6)进阶篇目——数组与指针笔试题目详解
c语言·开发语言·指针·语法
缘三水18 天前
【C语言】15.指针(5)
c语言·开发语言·指针·语法
最笨的羊羊18 天前
Debezium日常分享系列之:认识debezium operator、debezium server yaml格式、部署debezium server
debezium日常分享系列·debezium·yaml·operator·debezium server