JSON 转 YAML 转换器

把 JSON 转换为整洁、易读的 YAML,用于 Kubernetes、Docker Compose、GitHub Actions 或 Ansible,并可完全控制缩进、样式和引号。

在浏览器中运行无需注册不上传任何数据

JSON 输出

如何使用JSON 转 YAML

  1. 把 JSON 粘贴到左侧输入框,或打开一个 .json 文件。
  2. YAML 会随着你的输入实时显示在右侧。
  3. 选择缩进(2 或 4 个空格)和样式:块样式(每行一个键),或从指定嵌套层级开始使用流样式({a: 1}/[x, y])。
  4. 选择引号风格;如需按字母排序,勾选按键排序。
  5. 复制或下载 YAML。无效的 JSON 会报告其行号、列号和可能的原因。

为什么要把 JSON 转换为 YAML?

JSON 非常适合机器和 API,但 YAML 更便于人阅读和编辑:没有大括号、不强制使用引号,还支持注释。大多数基础设施工具(包括 Kubernetes、Helm、Docker Compose、GitHub Actions、GitLab CI 和 Ansible)都使用 YAML 配置,而你手头的数据(API 输出、kubectl get -o json、Terraform 状态)往往是 JSON。

块样式与流样式

块样式把每个键和列表项放在单独一行,是配置文件的惯用写法。流样式像 JSON 一样使用内联的 {} 和 [],让较短的叶子结构保持紧凑。“从第 2 层开始使用流样式”会让顶部两层保持块样式,更深的层级则内联显示,非常适合端口或环境变量这类由小对象组成的长列表。

安全的引号处理

YAML 解析器可能误读的字符串会被自动加上引号:例如 'no'、'on'、'1.0'、'null' 这样的值,以 * 或 & 开头的字符串,以及包含 : 的字符串。如果你的代码风格要求所有字符串都加引号,请选择始终单引号或始终双引号。

YAML 1.1 与 1.2 的坑

本转换器遵循当前规范 YAML 1.2。许多较旧的工具(PyYAML、Ruby 的 Psych、某些版本的 Kubernetes 和 Ansible)仍按 YAML 1.1 读取,而两者的规则有所不同:

  • 挪威问题:在 YAML 1.1 中,country: no 表示 false,于是挪威的国家代码 NO 就消失了。yes、on、off、y 和 n 也是如此。YAML 1.2 只把 true 和 false 视为布尔值。
  • 八进制数:0755 在 1.1 中是八进制,在 1.2 中则是普通十进制数(1.2 使用 0o755)。为安全起见,请给文件权限加上引号。
  • 六十进制数:在 1.1 中,22:30 可能被解析为数字 1350。请给时间和端口映射加上引号,例如 "8080:80"。

JSON → YAML 方向会自动给有歧义的字符串('no'、'on'、'y')加上引号,因此生成的 YAML 在两个版本中读取结果都相同。

常见问题

转换是无损的吗?
是的。每个 JSON 文档都是合法的 YAML 1.2,生成的 YAML 解析后得到的数据也完全相同。你可以按下互换来验证。
为什么有些字符串加了引号,有些没有?
选择仅在需要时时,只有在不加引号会改变含义的地方才会加引号,例如 'yes'、'123' 或含有特殊字符的字符串。其他内容保持不加引号,以便阅读。
可以在输出中添加注释吗?
JSON 没有注释,所以没有可转换的注释,但你可以在复制 YAML 后自行添加 # comments。
键的顺序会改变吗?
不会。键保持 JSON 中的顺序,除非你勾选了按键排序。
我的数据是私密的吗?
是的。转换器在你的浏览器中运行,不会用你的输入发起任何网络请求。

相关工具