YAML/JSON 配置文件互转指南:DevOps 与开发必备
JSON(更新于 2026年5月26日)
YAML vs JSON:为什么需要互转?
| 场景 | 常用格式 | 原因 |
|---|---|---|
| Docker Compose | YAML | 人类可读、支持注释 |
| Kubernetes | YAML | 官方推荐 |
| GitHub Actions | YAML | 工作流定义 |
| API 请求/响应 | JSON | 机器解析 |
| package.json | JSON | Node.js 标准 |
| tsconfig.json | JSON | TypeScript 标准 |
| Cargo.toml | TOML | Rust 标准 |
开发者经常需要在 YAML(配置文件)和 JSON(API/程序)之间转换。
使用工具库互转
YAML ↔ JSON
- 打开 YAML ↔ JSON 工具
- 粘贴 YAML 或 JSON
- 自动转换并格式化
- 复制结果
TOML ↔ JSON
- 打开 TOML ↔ JSON 工具
- 粘贴 TOML 或 JSON
- 自动转换
语法差异
YAML 特性(JSON 不支持)
# 注释 — JSON 不支持
name: toolsku
version: 1.0
port: 3000 # 数字不需要引号
tags: # 数组
- pdf
- image
database:
host: localhost # 嵌套对象
port: 5432
enabled: true # 布尔值
empty: null # 空值
multiline: | # 多行字符串
这是第一行
这是第二行
等价 JSON:
{
"name": "toolsku",
"version": "1.0",
"port": 3000,
"tags": ["pdf", "image"],
"database": { "host": "localhost", "port": 5432 },
"enabled": true,
"empty": null,
"multiline": "这是第一行\n这是第二行"
}
常见陷阱
1. YAML 的隐式类型转换
# ⚠️ 危险:YAML 1.1 会将以下值解析为布尔/空值
country: NO # → false (挪威国家码被误解!)
version: 1.0 # → 1.0 (float)
date: 2024-01-01 # → 可能被解析为日期
解决:对可能被误解的值加引号 "NO"、"1.0"。
2. 缩进必须使用空格
# ❌ 混用 Tab 和空格
name: test
tags: [a, b] # Tab 缩进 → 解析错误
# ✅ 统一 2 空格缩进
name: test
tags: [a, b]
3. JSON 不支持注释
// ❌ JSON 中不能写注释
{ "name": "test" /* 注释 */ }
需要注释时使用 YAML,或使用 JSON 格式化工具 的 JSON5 模式。
实战场景
Docker Compose → JSON(程序读取)
# docker-compose.yml
services:
web:
image: nginx:latest
ports: ["8080:80"]
→ 转为 JSON 供 Node.js 程序解析配置
Kubernetes YAML 调试
# 将 K8s YAML 转为 JSON 后用 jq 查询
kubectl get pod my-pod -o json | jq '.status.phase'
使用 JSONPath 工具 也可以直接从 JSON 中提取字段。
CI/CD 配置验证
转换 YAML 为 JSON 后,用 JSON 格式化工具 验证语法是否正确。
总结
YAML/JSON/TOML 互转是 DevOps 和全栈开发的日常需求。工具库提供 YAML↔JSON、TOML↔JSON 和 JSON 格式化 工具,浏览器本地处理,即时转换,免费使用。
#YAML#JSON#TOML#配置文件#DevOps