JSON ↔ YAML

JSON ↔ YAML 转换器

为 k8s、GitHub Actions、Docker Compose、helm 而生的双向转换。实时预览、idiomatic YAML 输出,全部在浏览器内运算。

js-yaml 很棒,但每次页面加载会多 ~30 KB(minified)。实战配置文件的 YAML 只用到规范的一小部分 — block mappings、block sequences、flow style、scalar 类型、多行 literal。我们手写了正好这个子集(~5 KB),让冷启动保持快速。如果你的 YAML 用到 anchors、aliases 或 custom tags,改用基于 js-yaml 的 CI pipeline。

三个在配置文件中很罕见的功能:(1)anchors 与 aliases(&name / *name) — 用于文档内去重;(2)custom tags(!!str / !!float / !!omap) — 用于覆盖隐式类型推断;(3)多文档文件--- 分隔。这些都不会出现在标准 k8s、GitHub Actions、Docker Compose、helm 或 ansible 文件中。如果你需要它们,改用完整的 YAML parser。

输入 JSON
输出 YAML

为实战 DevOps YAML 而生

k8s、GitHub Actions、Docker Compose、helm、ansible — 加上几个让你真正用得开心的小细节。

双向、实时

粘贴任一格式立即得到另一个。每次按键后实时更新 — 不需要按 Convert 按钮。一键切换方向,同一个工具反向运行。

为配置文件设计的 YAML 1.2 子集

Block 与 flow mappings/sequences、scalar(string、number、boolean、null)、多行 literal(|)与 folded(>)block scalar。覆盖 99% 的 k8s manifests、GitHub Actions、Docker Compose、GitLab CI、helm values、ansible playbook。

Idiomatic YAML 输出

JSON → YAML 输出你会手写的 YAML:plain-style key(不加引号)、字符串只有在会与保留字(true/false/null/yes/no)或数字混淆时才加引号、多行字符串用 | block scalar、可选 2 或 4 空格缩进。

Round-trip 安全

JSON → YAML → JSON 产出字节相同的文档。任一方向转换,反向都能干净还原。不会静默丢失类型或被自动转型。

保护隐私

你的配置永远不会离开设备。手写 parser + serializer 全部以 JavaScript 在本地执行。打开 DevTools → Network 即可验证没有任何对外请求。

轻量且快速

纯 JavaScript,没有 js-yaml 依赖。冷启动 gzip 后不到 25 KB。一般笔记本电脑上,100 KB 的 k8s manifest 30 毫秒内完成转换。

如何进行 JSON ↔ YAML 转换

从原始配置到你需要的格式,只需三个步骤。

  1. 1

    粘贴你的 JSON 或 YAML

    把配置放到 Input 面板。从 Direction 下拉菜单选择格式 — 需要时切换方向。每次按键后实时转换。

  2. 2

    微调缩进与验证

    默认缩进 2 空格(k8s / GitHub Actions 惯例)。团队用 4 就切换。点 Swap 把输出搬回输入 — 适合 round-trip 验证(粘贴 JSON、转成 YAML、Swap、再转回来、与原文比对)。

  3. 3

    复制或下载

    点复制图标把结果送到剪贴板,或点下载图标存为 output.yamloutput.json。底部显示字节差异,让你看到 YAML 表示有多紧凑。

为 DevOps + 后端团队打造

四种常见场景 — 在这些情况下,浏览器内隐私优先工具比写一个一次性 Python 脚本快太多。

Kubernetes manifests round-trip

kubectl get deployment my-app -o json → 粘贴进来 → YAML → 编辑 → 应用。或者:把 vendor 文档中的 YAML manifest 粘贴进来、转 JSON、用 jq 过滤、再转回 YAML、commit。

从博客抓 GitHub Actions / GitLab CI 片段

博客用 JSON 显示 CI 片段。粘贴进来、得到 YAML、贴到 .github/workflows/ci.yml。或者:多 job 的 YAML workflow 转成 JSON 做编程化编辑,再转回 YAML。

Helm values + Docker Compose

Helm values 文件是 YAML;某些 templating 工具要 JSON。粘贴你的 values.yaml、得到 JSON、跑你的工具、粘回来、转回 YAML 提交。Docker Compose 的 compose.yaml 同样的流程。

不能进云端服务的敏感配置

含 API key、密钥、内部 hostname、客户数据的配置 — 任何不能粘贴到云端 converter 的东西。浏览器内工具让每个字节都留在你的笔记本电脑上。打开 DevTools → Network 验证没有东西外泄。

100% 私密 — 在浏览器中运算

你的配置永远不会离开设备。打开 DevTools → Network,转换过程中没有任何对外请求。

  • 手写 YAML parser、YAML serializer、原生 JSON.parse、剪贴板 / 下载全部以 JavaScript 在你的机器上执行 — 没有 js-yaml CDN、没有第三方 API。
  • 无需登录、不对配置内容埋点。只用一个 cookie 记录 cookie 同意状态,以及一个 cookie 记录语言偏好。
  • 如果你处理敏感基础设施配置(kubeconfig 片段、secret manifest、签过名的证书),隐私故事很重要 — 放心粘贴。可在 DevTools 中验证。

相关指南

为 YAML 配置模式、JSON 工具、DevOps 文件格式精选的实用文章。

常见问题

已经有 <code>js-yaml</code> 了,为什么还要自己写 YAML 支持?

js-yaml 很棒,但每次页面加载会多 ~30 KB(minified)。实战配置文件的 YAML 只用到规范的一小部分 — block mappings、block sequences、flow style、scalar 类型、多行 literal。我们手写了正好这个子集(~5 KB),让冷启动保持快速。如果你的 YAML 用到 anchors、aliases 或 custom tags,改用基于 js-yaml 的 CI pipeline。

哪些 YAML 功能不支持?

三个在配置文件中很罕见的功能:(1)anchors 与 aliases(&name / *name) — 用于文档内去重;(2)custom tags(!!str / !!float / !!omap) — 用于覆盖隐式类型推断;(3)多文档文件--- 分隔。这些都不会出现在标准 k8s、GitHub Actions、Docker Compose、helm 或 ansible 文件中。如果你需要它们,改用完整的 YAML parser。

注释会保留吗?

不会 — 注释在解析时被去除。YAML 支持注释(#...),但 JSON 不支持。把 YAML 通过 JSON round-trip 一定会丢失注释信息。我们选择在解析时直接去除,而不是用 hack 尝试保留。如果你需要保留注释的 YAML 编辑,直接编辑 YAML。

为什么我的数字被转成字符串?

YAML 的隐式类型规则比 JSON 宽松:1.2.3 在 YAML 中是字符串(因为有两个点,不是数字),版本号像 v1.2 不加引号也是字符串。我们遵循 YAML 1.2 隐式类型规则:只有匹配 ^-?\d+(\.\d+)?([eE][-+]?\d+)?$ 的数字会变成 number;其他保持字符串。如果你需要精确的数字处理,在 YAML 中加引号或直接用 JSON。

数据会传到服务器吗?

不会。YAML parser、serializer、JSON parser、剪贴板复制全部以 JavaScript 在你的设备上执行。打开 DevTools → Network 即可验证转换过程中没有任何对外请求。粘贴 production k8s manifests、内部 CI 配置、含密的 helm values 进来都安全 — 没有任何字节离开你的笔记本电脑。