JSON 转 YAML 转换器
把 JSON 转换为整洁、易读的 YAML,用于 Kubernetes、Docker Compose、GitHub Actions 或 Ansible,并可完全控制缩进、样式和引号。
在浏览器中运行无需注册不上传任何数据
JSON 输出
如何使用JSON 转 YAML
- 把 JSON 粘贴到左侧输入框,或打开一个
.json文件。 - YAML 会随着你的输入实时显示在右侧。
- 选择缩进(2 或 4 个空格)和样式:块样式(每行一个键),或从指定嵌套层级开始使用流样式(
{a: 1}/[x, y])。 - 选择引号风格;如需按字母排序,勾选按键排序。
- 复制或下载 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 中的顺序,除非你勾选了按键排序。
我的数据是私密的吗?
是的。转换器在你的浏览器中运行,不会用你的输入发起任何网络请求。