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的精彩世界!

相关推荐
海棠AI实验室5 天前
第五章 配置管理:用 YAML/ENV 让项目可迁移
python·yaml
科雷软件测试8 天前
推荐几个常用的校验yaml、json、xml、md等多种文件格式的在线网站
xml·html·md·yaml
m0_488777659 天前
Kubernetes基础
云原生·容器·kubernetes·yaml
Trouvaille ~23 天前
【C++篇】C++11新特性详解(一):基础特性与类的增强
c++·stl·c++11·类和对象·语法·默认成员函数·初始化列表
艺杯羹1 个月前
掌握Spring Boot配置艺术:从YAML基础到实战进阶
java·spring boot·后端·yaml
gis分享者1 个月前
如何在 Shell 脚本中如何使用条件判断语句?(中等)
面试·shell·脚本·语法·使用·判断·条件
Mysticbinary1 个月前
原始类型与泛型对比笔记
语法
缘三水1 个月前
【C语言】17.字符函数和字符串函数
c语言·开发语言·语法
小李不困还能学1 个月前
markdown语法以及快捷键大全
markdown·语法