跳到主要内容

数据交换:YAML To JSON

使用 yaml 库(YAML 1.2 core schema)解析一个 YAML 文档,并输出为缩进的 JSON。注释会被丢弃,锚点和别名会被展开,yes 或 2024-01-01 这样的值保持为字符串。

把用 YAML 写的设置发送给只接受 JSON 的 API 或 JSON Schema 校验器。

YAML

适用场景

  • 把用 YAML 写的设置发送给只接受 JSON 的 API 或 JSON Schema 校验器。
  • 确认 CI 或 Kubernetes 文件中值的实际类型,例如版本号是字符串还是数字。

使用方法

  1. 粘贴单个 YAML 文档,或加载 .yaml/.yml 文件。
  2. 如果出现错误,在报告的行检查缩进、重复的键和 --- 分隔符。
  3. 检查 JSON 输出中的字符串与数字,然后复制。

YAML 输入

# deployment settings
service: billing-api
replicas: 2
version: "1.10"
enabled: yes
ports:
  - 80
  - 443
env:
  LOG_LEVEL: info

JSON

{
  "service": "billing-api",
  "replicas": 2,
  "version": "1.10",
  "enabled": "yes",
  "ports": [
    80,
    443
  ],
  "env": {
    "LOG_LEVEL": "info"
  }
}

功能与限制

解析在浏览器中进行。输出始终是 2 空格缩进的 JSON;没有压缩选项。

遵循 YAML 1.2 规则:yes/no/on/off 是字符串而不是布尔值,不带引号的日期保持为字符串。0o17 是八进制(15)。

合并键(<<: *anchor)不会被合并,而是作为字面量键 "<<" 出现。同一映射中的重复键会报错。

超过 2^53 的整数在 JSON 中会丢失精度。请在 YAML 中给长 ID 加引号。

FAQ

能转换用 --- 分隔的多文档文件吗?

不能。多个文档会导致错误 "Source contains multiple documents"。请一次粘贴一个文档。开头单独一个 --- 没有问题。

为什么 enabled: yes 在 JSON 中是字符串?

解析器遵循 YAML 1.2,只有 true 和 false 是布尔值。如需 JSON 布尔值,请写 true/false。

支持锚点和别名吗?

支持。像 *base 这样的别名会被替换为锚点值的副本。但 YAML 1.1 的合并键 << 不会生效。

规范与参考资料