YAML 語法詳解
一、YAML 簡介
YAML(YAML Ain't Markup Language)是一種人類可讀的數據序列化格式,常用於配置文件和數據交換。
二、基本語法規則
1. 大小寫敏感
name: John # 正確
Name: John # 被視為不同的鍵
2. 使用縮進表示層級關係
- 使用空格縮進(通常2個或4個空格)
- 禁止使用製表符(Tab)
person:
name: John
address:
city: Beijing
zip: 100000
3. 註釋
使用 # 開頭
# 這是註釋
name: John # 行內註釋
三、數據結構
1. 標量(Scalars)
基本數據類型:
string: "Hello World" # 字符串
string2: Hello World # 引號可選
integer: 123 # 整數
float: 3.14 # 浮點數
boolean: true # 布爾值
null: null # 空值
date: 2024-01-15 # 日期
2. 字符串特殊表示
# 多行字符串
description: |
這是第一行
這是第二行
保留換行符
# 摺疊多行字符串
summary: >
這是第一行
這是第二行
轉換為空格
# 保留換行和縮進
text: |2
第一行
第二行 # 保留2空格縮進
3. 序列(列表/數組)
使用短橫線 - 表示:
fruits:
- Apple
- Banana
- Orange
# 行內表示
colors: [red, green, blue]
4. 映射(對象/字典)
使用鍵值對:
person:
name: John Doe
age: 30
married: false
# 行內表示
person: {name: John, age: 30}
四、複雜結構示例
1. 嵌套結構
# 對象中包含數組
company:
name: Tech Corp
employees:
- name: Alice
department: Engineering
- name: Bob
department: Sales
# 數組中包含對象
servers:
- host: server1
port: 8080
- host: server2
port: 8081
2. *錨點和別名(& 和 )
用於複用數據:
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. 多文檔支持
用 --- 分隔文檔,... 結束文檔:
---
# 文檔1
name: Document 1
---
# 文檔2
name: Document 2
...
2. 數據類型標識
# 強制類型轉換
string_int: !!str 123 # 轉為字符串 "123"
int_string: !!int "456" # 轉為整數 456
binary: !!binary | # 二進制數據
SGVsbG8gV29ybGQ=
3. 複雜鍵
使用 ? 表示複雜鍵:
# 鍵本身是複雜結構
? - name
- age
: value
# 或使用引號
"complex.key": value
六、實際應用示例
1. 配置文件
# 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
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的精彩世界!