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

  1. 打开 YAML ↔ JSON 工具
  2. 粘贴 YAML 或 JSON
  3. 自动转换并格式化
  4. 复制结果

TOML ↔ JSON

  1. 打开 TOML ↔ JSON 工具
  2. 粘贴 TOML 或 JSON
  3. 自动转换

语法差异

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↔JSONTOML↔JSONJSON 格式化 工具,浏览器本地处理,即时转换,免费使用。

#YAML#JSON#TOML#配置文件#DevOps