tigtools

JSON ⇄ YAML 转换器

切换转换方向,粘贴数据,即刻获取转换结果。适用于 Kubernetes 清单、CI 流水线和应用配置。

在浏览器中运行 无需注册

转换方向
缩进

使用方法

  1. 选择转换方向:JSON → YAML 或 YAML → JSON。
  2. 粘贴数据,或点击“试用示例”。输入内容时,结果会实时更新。
  3. 为输出选择 2 个或 4 个空格的缩进。
  4. 复制或下载结果。点击“将输出用作输入”可切换方向并转换回来。

工作原理

转换使用开源 yaml 库(版本 2),该库实现了 YAML 1.2 规范。实际使用中,YAML 1.2 是 JSON 的超集,因此任何 JSON 文档都可以无损转换为 YAML;仅使用映射、列表、字符串、数字、布尔值和 null 的 YAML,也可以转换回完全相同的 JSON。

生成 YAML 时,工具会为可能被读者误解的字符串加上引号。较旧的 YAML 1.1 解析器(例如 PyYAML 和许多 CI 工具)会将 yes、no、on 和 off 读取为布尔值,将 0777 读取为八进制数,并将 2024-01-31 读取为日期,因此这些值会写成 "yes"、"0777" 和 "2024-01-31"。较长的字符串不会折叠到多行。注释无法保留,因为 JSON 不支持注释。

读取 YAML 时,锚点(&name)和别名(*name)(包括 << 合并键)会被展开;使用 --- 分隔的多个文档会转换为一个 JSON 数组。为保护浏览器,别名展开数量受到限制,以阻止“亿级笑声”文档攻击。没有对应 JSON 类型的 YAML 值会尽可能贴近原意地转换:.inf 和 .nan 会变成 null,时间戳则保留为字符串。语法错误会显示所在行和列。

示例

Kubernetes 清单

脚本以 JSON 编写的 Deployment 会转换为 kubectl 用户熟悉的 YAML 格式,其中 containers 下的列表会写成 - name: web。像 "no" 这样的值会保留引号,因此仍是字符串。

含锚点的 CI 配置

流水线文件定义 defaults: &defaults,并通过 <<: *defaults 复用它们。转换为 JSON 后,可以准确看到合并后每个作业包含哪些键。

OpenAPI 规范

OpenAPI 文件以 YAML 格式维护,但代码生成器需要 JSON。粘贴 YAML,选择 2 个空格缩进,然后下载 .json 文件。

常见问题

为什么我的 YAML 中的 "yes" 带有引号?

按照 YAML 1.1 规则(PyYAML、Ansible 和许多其他工具仍在使用),未加引号的 yes、no、on 或 off 会被视为布尔值。加上引号后,在所有解析器中都会保留为字符串。引号不属于值本身。

转换为 JSON 时会保留 YAML 注释吗?

不会。JSON 没有注释语法,因此注释会被删除。将 JSON 转回 YAML 时也不会恢复这些注释。

多个 YAML 文档以 --- 分隔时会怎样?

它们会按原有顺序转换为一个 JSON 数组,每个文档对应一个元素。单个文档则会直接转换为对应的值。

CloudFormation 的 !Ref 等自定义标签会怎样处理?

工具无法识别特定应用的标签。工具会显示警告,并将带标签的值作为普通值转换,因此 !Ref MyBucket 会变成字符串 "MyBucket",标签本身会丢失。

隐私

两个方向的转换都完全在浏览器中进行。您的 JSON 或 YAML 不会上传、存储,也不会纳入分析数据。