{ }
EN

JSON ↔ YAML 互转

在 JSON 与 YAML 配置之间即时互转,离线运行,保留锚点、引用与 Unicode。

缩进:

JSON、YAML 以及如何选用

JSON 与 YAML 解决的是相互重叠的问题 —— 两者都用来描述结构化数据 —— 但生态偏好不同。JSON 占据线协议与 API:无歧义、解析快、每种语言的标准库都支持。YAML 占据配置文件(Kubernetes 清单、CI 流水线、Ansible playbook):更紧凑、支持注释、读起来更像散文。

每个 JSON 文档都是合法的 YAML —— YAML 是严格超集。从 JSON 转 YAML 几乎总是干净的;从 YAML 转 JSON 偶尔会丢信息:注释会被丢弃、tag 会被规范化、节点锚点引用会被展开。本工具使用 js-yaml(JavaScript 中部署最广的 YAML 1.2 解析器),完全在浏览器内运行。

使用场景

  • 把 Kubernetes ConfigMap 从 YAML 转 JSON 后用 jq 处理。
  • 把 JSON 版 OpenAPI 转成更易人工评审的 YAML。
  • 快速重排别人仓库里的 CI 流水线配置。
  • 提交前确认 YAML 文件能无歧义地解析。
  • 写 GitHub Actions 或 Helm values 时把 JSON 片段转成 YAML。

最佳实践

  • 供人类编辑的配置避免 YAML 的 flow 风格 —— block 风格更可扩展。
  • 始终给看起来像数字、布尔、日期的字符串加引号(YAML 的 "挪威问题")。
  • 选定一种缩进(推荐 2 空格)并通过 lint 强制执行。
  • 对精度敏感的场景优先 JSON —— YAML 1.1 历史上把 on/off/yes/no 当布尔。

常见问题

YAML 转 JSON 时注释会保留吗?
不会。JSON 没有注释语法,YAML 注释会在转换中丢失。
支持哪个 YAML 版本?
通过 js-yaml 支持 YAML 1.2。臭名昭著的 1.1 布尔强制(yes/no/on/off)不会触发。
支持多文档 YAML 吗?
目前只解析第一份文档。多文档流(用 --- 分隔)后续会通过开关支持。
为什么数字会被加引号?
若该值在反向解析时会变成不同类型(例如看起来像数字的字符串),js-yaml 会加引号以保证往返一致。