123问免费工具与知识服务
123问工具大全› 工具大全› 开发工具› YAML/JSON互转

📑 YAML/JSON互转

YAML↔JSON · 配置文件 · DevOps必备

YAML/JSON互转常见问题

YAML和JSON有什么区别?

YAML采用缩进语法,更易读易写,适合配置文件(如Docker Compose、K8s)。JSON是严格的数据交换格式,适合API通信。YAML支持注释,JSON不支持。

YAML支持哪些数据类型?

字符串、整数、浮点数、布尔值(true/false/yes/no)、null、日期时间、数组(-)、对象(缩进)、锚点和引用(&和*)。

YAML为什么用缩进表示层级?

YAML是「缩进敏感」的,用空格缩进表达层级关系,放弃了JSON的{}和[]。这让配置更简洁易读,但也要求缩进严格统一(通常用2空格),混用Tab会报错。

YAML里的缩进能用Tab吗?

不能。YAML规范禁止用Tab做缩进,必须用空格。混用Tab和空格会导致解析错误,这是新手最常见的报错原因。

YAML锚点 `&` 和引用 `*` 是干什么的?

锚点(&name)定义一个可复用的值,引用(*name)在别处引用它。用于消除重复配置。例如定义一个公共配置,多个服务都引用它。

JSON转YAML后布尔值会变成什么?

JSON里的 true/false 会转成 YAML 的 true/false,两者等价。但注意YAML里 yes/no/on/off 也会被当作布尔值,从JSON转过来时规范的做法是统一用 true/false。

YAML里字符串到底要不要加引号?

大多数字符串可以不加引号,但如果字符串以特殊字符开头、包含冒号加空格、或以数字开头像版本号,最好加引号,否则可能被误解析成数字或对象。

K8s和Docker为什么都用YAML?

因为YAML比JSON更适合人编写和阅读的声明式配置,还支持注释。Kubernetes的deployment、Docker Compose文件都是YAML格式,这也是本工具最常用的场景。

YAML/JSON互转 - 示例演示

示例一:YAML转JSON

输入:version: "3"\nservices:\n web:\n image: nginx\n ports:\n - "80:80"
结果:{"version":"3","services":{"web":{"image":"nginx","ports":["80:80"]}}}
这是典型的Docker Compose配置,缩进表达嵌套,数组用-开头,转成JSON后结构一目了然。

示例二:JSON转YAML

输入:{"name":"config","debug":true,"servers":[{"host":"192.168.1.1","port":8080}]}
结果:name: config\ndebug: true\nservers:\n - host: 192.168.1.1\n port: 8080
JSON转YAML后,[]数组变成-列表,{}对象变成缩进嵌套,更符合人阅读习惯。

示例三:带注释的YAML

输入:# 数据库配置\ndb:\n host: localhost # 主机地址\n port: 3306
结果:转为JSON后:{"db":{"host":"localhost","port":3306}},注释自动被忽略
YAML支持注释是它比JSON更适合配置文件的重要原因,转JSON时注释会被丢弃。

YAML/JSON互转深度解读

YAML的基本语法

YAML全部由「键值对」和「列表」构成。键值对用「键: 值」表示,值可以是字符串、数字、布尔、另一组键值对或列表。列表用「- 」开头。

YAML 常见语法示例
语法YAML写法等价的JSON
字符串name: 张三"name":"张三"
数字age: 30"age":30
布尔vip: true"vip":true
nullnote: null 或 ~"note":null
列表tags:\n - a\n - b"tags":["a","b"]
对象user:\n name: 李四"user":{"name":"李四"}
多行文本desc: |\n 第一行\n 第二行"desc":"第一行\n第二行"

YAML的锚点与引用

  • 锚点定义:defaults: &defaults\n image: nginx
  • 引用复用:web:\n <<: *defaults
  • 重复使用同一配置,避免复制粘贴,维护成本更低。
  • 注意:锚点只在同一份YAML文档内有效。

锚点和引用是YAML的高级特性,能大幅减少重复配置,在K8s的values文件和多服务配置里很常用。

YAML解析的常见坑

  • 用Tab缩进:规范禁止,必须改空格。
  • 缩进不一致:同一层级缩进必须完全对齐。
  • 值里有冒号+空格:如 "time: 12:30",需要加引号。
  • 字符串以特殊字符开头:如 *、&、!,#,需要加引号。
  • 数字被误解析:如手机号013开头的版本号,需要加引号。
  • 重复的键:后面的值会覆盖前面的,容易踩坑。

JSON和YAML怎么选

  • 配置文件、声明式资源:优先YAML,可读性强、支持注释。
  • 接口数据交换、前后端通信:优先JSON,解析快、标准统一。
  • 需要存储大量数据:JSON更紧凑,YAML只是易读但体积略大。
  • CI/CD、容器编排:YAML是事实标准(GitHub Actions、K8s、Docker)。

YAML/JSON互转参考数据

YAML标量与JSON类型对照

YAML写法解析类型说明
true / false / yes / no / on / off布尔值yes/no/on/off会被当作布尔
123整数十进制数字
1.5浮点数带小数
0x1A整数十六进制
null / ~ / 空N/A空值
2024-01-01日期字符串ISO日期
'013'字符串加引号避免被当数字

常见YAML配置文件应用场景

场景文件用途
容器编排docker-compose.yml定义多容器服务
K8s资源deployment.yaml声明应用部署
CI/CD.github/workflows/*.yml自动化流水线
数据库schema.sql(非YAML)数据定义
配置中心config.yaml应用运行配置
Ansibleplaybook.yml自动化运维

使用说明

使用方法

1. 粘贴YAML或JSON内容到输入框。

2. 点击"YAML→JSON"或"JSON→YAML"按钮。

3. 查看转换结果。

分享工具: Facebook Twitter 微博 复制链接