YAML(YML)格式化与验证工具

在线格式化、验证、压缩和下载 YAML,保留注释并精确定位语法错误。

格式化会保留 YAML 注释;压缩输出会移除注释并使用流式语法。

什么是 YAML/YML 格式化工具?

YAML(YAML Ain't Markup Language)是一种便于阅读的数据格式,常用于应用配置、CI/CD、Docker Compose 和 API 定义。本工具可在浏览器本地格式化、验证和压缩 YAML 或 YML,不会上传输入内容。

如何使用

  1. 将 YAML 或 YML 粘贴到输入编辑器。
  2. 选择 2 或 4 空格缩进以及行宽。
  3. 点击“格式化 YAML”“压缩 YAML”或“验证”。
  4. 复制结果或下载 .yaml 文件。

✨ 主要特性

  • 🎯 格式验证:检查 YAML 语法错误并提供详细提示
  • 🎨 格式美化:自动缩进和格式化 YAML 内容
  • 🗜️ 内容压缩:移除多余空格和注释,压缩文件大小
  • 📋 一键复制:格式化结果可直接复制使用
  • 🔧 错误定位:精确定位语法错误位置
  • 💾 文件下载:将格式化结果保存为 .yaml 文件

📖 使用示例

格式化示例

原始 YAML:

name:工具迷
version:1.0.0
features:
- 格式化
- 验证
- 压缩
config:
  debug:true
  port:3000

格式化后:

name: 工具迷
version: 1.0.0
features:
  - 格式化
  - 验证
  - 压缩
config:
  debug: true
  port: 3000

复杂结构示例

输入 YAML:

database:
  host: localhost
  port: 5432
  credentials:
    username: admin
    password: secret
  pools:
    - name: read_pool
      size: 10
    - name: write_pool
      size: 5

验证和美化后:

database:
  host: localhost
  port: 5432
  credentials:
    username: admin
    password: secret
  pools:
    - name: read_pool
      size: 10
    - name: write_pool
      size: 5

🎯 应用场景

1. 应用 YAML(YML) 配置文件格式化

整理和验证应用配置文件:

# 应用配置文件 (config.yml)
app:
  name: 工具迷
  version: 1.0.0
  environment: production
  
server:
  host: 0.0.0.0
  port: 3000
  ssl:
    enabled: true
    cert_path: /etc/ssl/certs/app.crt
    key_path: /etc/ssl/private/app.key
    
database:
  type: postgresql
  host: localhost
  port: 5432
  name: toolmi_db
  username: ${DB_USER}
  password: ${DB_PASSWORD}
  pool:
    min_connections: 2
    max_connections: 10
    
redis:
  host: localhost
  port: 6379
  password: ${REDIS_PASSWORD}
  db: 0
  
logging:
  level: info
  format: json
  outputs:
    - type: file
      path: /var/log/app.log
    - type: console

2. Docker Compose YAML(YML) 配置文件格式化

管理 Docker 容器编排配置:

# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=database
    depends_on:
      - database
      - redis
    volumes:
      - ./uploads:/app/uploads
    networks:
      - app-network
      
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: toolmi_db
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network
      
  redis:
    image: redis:6-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    networks:
      - app-network

volumes:
  postgres_data:
  redis_data:

networks:
  app-network:
    driver: bridge

3. CI/CD 流水线 YAML(YML) 配置格式化

GitHub Actions 工作流配置:

# .github/workflows/deploy.yml
name: 部署到生产环境

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  NODE_VERSION: '18'
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
      - name: 检出代码
        uses: actions/checkout@v3
        
      - name: 设置 Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: 'npm'
          
      - name: 安装依赖
        run: npm ci
        
      - name: 运行测试
        run: npm test
        
      - name: 运行代码检查
        run: npm run lint
        
  build:
    needs: test
    runs-on: ubuntu-latest
    
    steps:
      - name: 检出代码
        uses: actions/checkout@v3
        
      - name: 构建 Docker 镜像
        run: |
          docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest .
          
      - name: 推送到注册表
        run: |
          echo ${{ secrets.GITHUB_TOKEN }} | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
          docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest

4. Kubernetes YAML(YML) 清单格式化

Kubernetes 部署配置文件:

# deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: toolmi-app
  labels:
    app: toolmi
spec:
  replicas: 3
  selector:
    matchLabels:
      app: toolmi
  template:
    metadata:
      labels:
        app: toolmi
    spec:
      containers:
        - name: app
          image: toolmi/app:latest
          ports:
            - containerPort: 3000
          env:
            - name: NODE_ENV
              value: "production"
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: app-secrets
                  key: db-host
          resources:
            requests:
              memory: "256Mi"
              cpu: "250m"
            limits:
              memory: "512Mi"
              cpu: "500m"
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 30
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 5

---
apiVersion: v1
kind: Service
metadata:
  name: toolmi-service
spec:
  selector:
    app: toolmi
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer

🔧 技术详解

YAML 语法规则

YAML 的基本语法规则:

缩进规则:

  • 使用空格进行缩进,不能使用制表符
  • 相同层级的元素必须左对齐
  • 子元素必须比父元素多缩进

数据类型:

  • 字符串:可以不用引号,特殊字符需要引号
  • 数字:整数和浮点数
  • 布尔值:true/false、yes/no、on/off
  • 空值:null、~、或空

集合类型:

  • 数组:使用 - 表示列表项
  • 对象:使用 key: value 表示键值对
  • 嵌套:支持任意层级的嵌套结构

常见错误

YAML 格式化工具可以检测的常见错误:

缩进错误:

# 错误示例
config:
  debug: true
 port: 3000  # 缩进不一致

# 正确示例
config:
  debug: true
  port: 3000

引号问题:

# 错误示例
message: It's a test  # 单引号未转义

# 正确示例
message: "It's a test"
# 或
message: 'It''s a test'

列表格式:

# 错误示例
features:
- format
 - validate  # 缩进错误

# 正确示例
features:
  - format
  - validate

💡 使用技巧

  • 缩进一致:始终使用相同数量的空格进行缩进(推荐2个空格)
  • 引号使用:包含特殊字符的字符串使用引号包围
  • 注释规范:使用 # 添加注释,注释前加空格
  • 多行字符串:使用 |> 处理多行文本

⚠️ 注意事项

  • 制表符禁用:YAML 不允许使用制表符,只能使用空格
  • 缩进敏感:缩进错误会导致解析失败
  • 特殊字符:冒号、引号等特殊字符需要正确处理
  • 编码格式:确保文件使用 UTF-8 编码

🚀 开始使用

  1. 输入 YAML:在输入框中粘贴要处理的 YAML 内容
  2. 选择操作:点击"格式化"、"验证"或"压缩"按钮
  3. 查看结果:在输出框中查看处理后的 YAML
  4. 复制或下载:复制结果,或保存为 formatted.yaml
  5. 错误修复:根据错误提示修复语法问题

提示:本工具在客户端本地进行处理,不会上传您的 YAML 内容到服务器,确保数据安全。

❓ 常见问题 FAQ

Q1:格式化失败或报错?
A:请确认YAML,YML语法正确,必要时先校验。

Q2:可以压缩成一行吗?
A:可以。点击“压缩 YAML”会使用流式语法输出,并移除注释。

Q3:如何保留注释?
A:使用普通格式化即可保留注释;压缩模式会移除注释。