YAML 转 JSON

将 YAML 数据转换为 JSON。可在浏览器中即时把 Kubernetes 清单、docker-compose.yml、CI 配置文件等 YAML 结构,转换成 jq 等仅支持 JSON 的工具可以处理的格式。

什么是 YAML 转 JSON

YAML 转 JSON 是把 Kubernetes 清单、docker-compose.yml、GitHub Actions 工作流等以易读的 YAML 格式书写的配置,在浏览器中即时转换成程序更容易机械化处理的 JSON 格式。本工具支持映射(`key: value`)、块状序列(`- item`)、流式序列(`[a, b, c]`)、流式映射(`{a: 1, b: 2}`),以及字符串、整数、小数、布尔值、null 等基本标量,还有 `#` 注释。只要 YAML 写法属于日常配置中常见的形式,粘贴后即可立刻得到可用的 JSON。

不过本工具并未实现完整的 YAML 1.2 规范。用于值复用的锚点(`&`)与别名(`*`)、第二个及以后的 `---` 构成的多文档流、用于多行字符串的 `|`、`>` 块状标量,以及 `- - item` 这类同行嵌套序列均不受支持。如果输入依赖这些高级特性,转换会失败并报错,建议先把相关部分改写成更简单的等价形式再粘贴。所有处理都在浏览器本地完成,粘贴的内容不会发送到任何外部服务器,这对包含密钥或内部基础设施信息的 YAML 尤其重要。

YAML 转 JSON 的使用方法

  1. 粘贴 YAML 将要转换的 YAML 粘贴到左侧输入框。如果手头没有现成数据,可以点击"加载示例"先试用示例内容。
  2. 查看转换结果 输入或粘贴后右侧会立即显示 JSON。如果语法有问题,会在原位显示说明可能原因的错误信息。
  3. 切换格式化显示 打开"格式化显示"可得到带缩进、易读的结果;关闭则会压缩成不含换行的单行 JSON,可根据粘贴目的自行切换。
  4. 复制或下载结果 使用复制按钮可直接送入剪贴板,使用下载按钮可将结果保存为独立的 .json 文件以便日后使用。

用好本工具的小技巧

  • 直接粘贴 Kubernetes 清单或 docker-compose.yml,即可将其结构可视化为 JSON,方便 jq 等仅支持 JSON 的命令行工具进行查询。
  • 以零开头的邮政编码、电话号码等值如果不加引号,会被解析为数字并丢失开头的零,需要保留为字符串的值请务必加上引号。
  • 本工具不支持使用锚点(`&`)、别名(`*`)或 `|`、`>` 块状标量等高级写法的复杂 YAML,请先改写为简单形式再粘贴。
  • 取消勾选"格式化显示"即可得到不含换行的单行 JSON,适合粘贴到不希望包含换行符的 API 请求体中。

YAML 转 JSON 的应用场景

用 jq 查询 Kubernetes 清单

清单文件动辄数百行,转换成 JSON 后交给 jq,用类似 `.spec.containers[].image` 的路径即可瞬间取出所需的值。

让脚本读取 docker-compose.yml

如果自己编写的脚本或自动化工具没有内置 YAML 解析库,先转换成 JSON 后,仅用标准的 JSON 解析器就能处理配置内容。

可视化 CI 配置文件的结构

粘贴 GitHub Actions 或 GitLab CI 的工作流文件,以 JSON 形式查看结构,可以更清楚地把握仅靠缩进容易忽略的嵌套关系。

为使用只接受 YAML 的工具或 API 做准备

即便你手头的数据源是 JSON,也可以先转换一份现有的 YAML 文件,提前确认其结构组织方式。

衔接其他 JSON 工具继续处理

转换后的 JSON 可以直接粘贴到JSON 转 TypeScript 类型定义或JSON 格式化工具中继续加工。

YAML 相关术语表

YAML
"YAML Ain't Markup Language" 的递归缩写。它通过缩进而非括号来表示层级结构,并且允许注释、引号大多可省略,因此成为人工直接编辑的配置文件的常用格式。
映射(Mapping)
以 `key: value` 形式排列键值对的 YAML 结构,对应 JSON 中的对象。相同缩进层级的行会被视为同一层级的键。
块状序列
由若干以连字符加空格开头的行组成的 YAML 数组表示法,例如 `- item`,对应 JSON 的数组。本工具会把同一缩进下连续出现的 `-` 行读作一个数组。
流式写法
不使用基于缩进的块状格式,而是在一行内写出序列或映射的方式,例如 `[a, b, c]` 或 `{a: 1, b: 2}`,外观更接近 JSON 的数组和对象。
锚点与别名
用 `&name` 为某个值命名,再用 `*name` 在别处引用该值的 YAML 特性,可以避免重复书写相同配置。本工具不支持该特性。
块状标量
以 `|`(保留换行)或 `>`(把换行折叠为空格)开头,用于书写多行字符串的写法,常用于内嵌 Shell 脚本或长说明文字,本工具不支持。
文档流
在一个 YAML 文件中用 `---` 分隔多个文档的机制,常用于 Kubernetes 把多个资源合并到一个文件中,而本工具一次只转换一个文档。

常见问题

当你想用 jq 等仅支持 JSON 的命令行工具查询或处理 Kubernetes 清单、CI 配置文件时,或者某个 API、脚本只接受 JSON 而无法直接读取 YAML 时,先转换成 JSON 会很方便。

不支持。本工具是仅覆盖常用写法(映射、序列、基本标量)的轻量解析器,因此用于值复用的锚点、别名,以及多文档流、`|`/`>` 块状标量等功能均不在支持范围内。

最常见的原因是缩进不一致,例如同一层级的项目空格数量不统一,或使用了制表符(Tab)而非空格进行缩进。此外,`key: value` 中冒号后面缺少空格也会导致解析失败。

本工具目前仅支持 YAML 转 JSON 这一方向。如果需要单独格式化或校验 JSON、YAML,请使用本站的其他格式化工具。
工具君

闲话 ― 为什么配置文件用 YAML 写,工具却要 JSON

YAML 因为可以写注释、引号也大多可以省略,可读性很高,因此被广泛用作 Kubernetes、docker-compose、GitHub Actions 工作流、Ansible playbook 等需要人工直接编辑的配置文件格式。相比之下,JSON 的规范简单明确,几乎没有歧义,程序处理起来更加机械化,因此成为了 API 数据交换以及 jq 等命令行工具的标准输入格式。

YAML 转 JSON 正是为了弥合"人写 YAML、工具要 JSON"这一差距而存在的。尤其是 Kubernetes 的清单文件常常长达数百行,仅靠 `grep` 查找特定值很快就会遇到瓶颈。先转换成 JSON 后再用 jq 查询,就能用类似 `.spec.containers[].image` 的路径瞬间取出所需的值。

不过完整的 YAML 规范(YAML 1.2)范围非常广,包含通过锚点、别名实现值复用、多文档流、用于多行字符串的块状标量等许多高级功能。本工具刻意不覆盖这些全部规范,而是聚焦于实际工作中最常出现的映射、序列与基本标量这一"常用子集",从而实现了无需外部依赖的简洁实现。