
文章目录
-
- [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
七、最佳实践
- 一致性:统一使用2或4个空格缩进
- 可读性:复杂结构适当换行
- 验证:使用YAML验证工具检查语法
- 避免复杂:避免过度复杂的嵌套结构
- 敏感信息:不要在YAML中直接存储密码等敏感信息
八、常见工具
- 验证工具:yamllint、在线验证器
- 解析库 :
- Python:PyYAML、ruamel.yaml
- JavaScript:js-yaml
- Java:SnakeYAML
- Go:go-yaml
九、注意事项
- YAML 1.2 不再支持一些1.1的特性(如布尔值简写)
- 某些实现可能不支持所有高级特性
- 注意特殊字符的转义
YAML以其简洁的语法和良好的可读性,成为现代软件开发中广泛使用的配置格式,特别是在容器编排、CI/CD配置和应用程序设置中。
结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!