📑 YAML/JSON互转
YAML↔JSON · 配置文件 · DevOps必备
YAML↔JSON · 配置文件 · DevOps必备
YAML采用缩进语法,更易读易写,适合配置文件(如Docker Compose、K8s)。JSON是严格的数据交换格式,适合API通信。YAML支持注释,JSON不支持。
字符串、整数、浮点数、布尔值(true/false/yes/no)、null、日期时间、数组(-)、对象(缩进)、锚点和引用(&和*)。
YAML是「缩进敏感」的,用空格缩进表达层级关系,放弃了JSON的{}和[]。这让配置更简洁易读,但也要求缩进严格统一(通常用2空格),混用Tab会报错。
不能。YAML规范禁止用Tab做缩进,必须用空格。混用Tab和空格会导致解析错误,这是新手最常见的报错原因。
锚点(&name)定义一个可复用的值,引用(*name)在别处引用它。用于消除重复配置。例如定义一个公共配置,多个服务都引用它。
JSON里的 true/false 会转成 YAML 的 true/false,两者等价。但注意YAML里 yes/no/on/off 也会被当作布尔值,从JSON转过来时规范的做法是统一用 true/false。
大多数字符串可以不加引号,但如果字符串以特殊字符开头、包含冒号加空格、或以数字开头像版本号,最好加引号,否则可能被误解析成数字或对象。
因为YAML比JSON更适合人编写和阅读的声明式配置,还支持注释。Kubernetes的deployment、Docker Compose文件都是YAML格式,这也是本工具最常用的场景。
YAML全部由「键值对」和「列表」构成。键值对用「键: 值」表示,值可以是字符串、数字、布尔、另一组键值对或列表。列表用「- 」开头。
| 语法 | YAML写法 | 等价的JSON |
|---|---|---|
| 字符串 | name: 张三 | "name":"张三" |
| 数字 | age: 30 | "age":30 |
| 布尔 | vip: true | "vip":true |
| null | note: null 或 ~ | "note":null |
| 列表 | tags:\n - a\n - b | "tags":["a","b"] |
| 对象 | user:\n name: 李四 | "user":{"name":"李四"} |
| 多行文本 | desc: |\n 第一行\n 第二行 | "desc":"第一行\n第二行" |
锚点和引用是YAML的高级特性,能大幅减少重复配置,在K8s的values文件和多服务配置里很常用。
| YAML写法 | 解析类型 | 说明 |
|---|---|---|
| true / false / yes / no / on / off | 布尔值 | yes/no/on/off会被当作布尔 |
| 123 | 整数 | 十进制数字 |
| 1.5 | 浮点数 | 带小数 |
| 0x1A | 整数 | 十六进制 |
| null / ~ / 空 | N/A | 空值 |
| 2024-01-01 | 日期字符串 | ISO日期 |
| '013' | 字符串 | 加引号避免被当数字 |
| 场景 | 文件 | 用途 |
|---|---|---|
| 容器编排 | docker-compose.yml | 定义多容器服务 |
| K8s资源 | deployment.yaml | 声明应用部署 |
| CI/CD | .github/workflows/*.yml | 自动化流水线 |
| 数据库 | schema.sql(非YAML) | 数据定义 |
| 配置中心 | config.yaml | 应用运行配置 |
| Ansible | playbook.yml | 自动化运维 |
1. 粘贴YAML或JSON内容到输入框。
2. 点击"YAML→JSON"或"JSON→YAML"按钮。
3. 查看转换结果。