JSON ↔ YAML 转换

在浏览器把 JSON 转成 YAML,或把 YAML 转成 JSON。大数字不失真,yes、1.0 这类容易误判的值会加上引号,支持锚点、合并 key 与多文档。

什么是 YAML?

YAML 是用缩进代替大括号的配置文件格式,Docker Compose、Kubernetes、GitHub Actions 与 Spring Boot 的 application.yml 都使用它。YAML 1.2 是 JSON 的超集,两者可以完整互转,区别主要在可读性。

使用方法

  1. 选择方向:JSON → YAML 或 YAML → JSON。
  2. 粘贴内容。开启自动转换时,输入即实时转换;语法错误会标出准确的行与列。
  3. 选择 2 或 4 个空格的缩进,再复制或下载结果。点击“结果放回输入”可以反向转换回去。

示例

这段 JSON:

{"name":"web","replicas":3,"ports":[80,443],"env":{"DEBUG":"yes","VERSION":"1.10"}}

会转成:

name: web
replicas: 3
ports:
  - 80
  - 443
env:
  DEBUG: "yes"
  VERSION: "1.10"

注意 "yes" 与 "1.10" 加了引号。不加的话,很多 YAML 工具会把 yes 读成布尔值 true、把 1.10 读成数字 1.1,配置就在不知不觉中被改掉了。

常见问题

为什么有些值加了引号?

YAML 可能误判的字符串一律加引号:yes、no、on、null 这类词,看起来像数字或日期的文本,以及含有 : 或 # 的文本。有名的例子是挪威的国家代码 NO,旧版 YAML 解析器会把它变成 false。

大数字会保持精确吗?

会,双向都会。9007199254740993 或 1280.50 这样的值会按原文写出。很多在线转换工具会让数字经过 JavaScript,把很大的 ID 四舍五入成 9007199254740992。

注释、锚点和多文档会怎么处理?

JSON 没有注释,所以 YAML 的注释会被去掉。锚点与别名(&base、*base)以及合并 key(<<: *base)会展开成实际的值。以 --- 分隔的多份文档会转成 JSON 数组。

日期会怎么处理?

2024-01-01 这类日期在 JSON 中保持原来的文本,不会换成其他格式或时区。