ToolConvoyToolConvoyv2.6
DATA

YAML 转 JSON — 在浏览器中将 YAML 配置转换为 JSON

将 YAML 数据转换为 JSON 格式。支持解析 anchor、alias 和 merge key,可配置缩进,完全在浏览器中运行。

● 本地运行 · 零拷贝流水线页面加载以来工具发出的网络请求:0 次

YAML 和 JSON 是兄弟格式 —— YAML 是语法上更人性化的 JSON,任意合法的 JSON 文件本身也是合法的 YAML。YAML 到 JSON 的转换是 DevOps 中最常见的数据格式转换:因为 YAML 是人写的语言(Kubernetes manifests、CI 流水线、应用配置),JSON 是机器读的语言(API 响应、Terraform state、云厂商 CLI 输出)。转换本身几乎微不足道 —— YAML 是 JSON 的超集 —— 但 YAML 引入了一些特性,在被 JSON 消费之前必须先解析掉:anchor 和 alias(文件内的 DRY 引用)、merge key(共享配置块的深度合并),以及更丰富的类型系统(时间戳、十六进制数、二进制数据)。

Anchor 和 alias 是 YAML 在转换过程中最容易引起混淆的特性。YAML anchor(&defaults)定义一个可复用的块,而 alias(*defaults)会把该块插入到 alias 出现的位置。JSON 输出中包含的是完全展开后的数据 —— anchor 和 alias 只是 YAML 编写时的一种便利,并不是数据模型,JSON 中没有对应概念。merge key(<<: *defaults)通过把被 alias 引用的映射深度合并到当前映射来解析,当前映射自身的键优先。整个解析在转换过程中自动完成,JSON 输出就是合并后的结果。

最后,关于下游交接:如果 JSON 输出要喂给某门编程语言,可以搭配对应的 JSON-to-Code 生成器(JSON 转 TypeScript 用于前端类型、JSON 转 Python 用于数据处理、JSON 转 Go 用于后端结构体)。如果 JSON 要变成另一个工具的配置(Ansible inventory、Terraform variables、GitHub Actions inputs),JSON 就是合适的中间格式,因为每个配置管理工具都有 JSON 解析器。如果需要反向转换(JSON 转 YAML),本站的 JSON-to-YAML 工具沿用同样的缩进和格式控制选项。

广告

使用方法

  1. 粘贴你的 YAML

    把 YAML 字符串或文件拖入输入区。解析器支持 YAML 1.2,包括多文档 YAML(以 `---` 分隔)。每个文档会被转换为独立的 JSON 对象。

  2. 选择 JSON 格式

    默认采用 2 空格缩进并美化输出。切换到 compact 模式可去除多余空白(用于机器之间的数据交换)。可在 2 和 4 空格之间切换,以满足不同风格指南的要求。

  3. 复制或下载 JSON

    把 JSON 复制到剪贴板,或下载为 .json 文件。输出符合 JSON 规范(RFC 8259),可被所有主流语言的标准库正确解析。

常见问题

转换器支持 YAML 的 anchor 和 alias 吗?

支持。YAML anchor(`&ref`)和 alias(`*ref`)会被展开为具体的值。merge key(`<<: *ref`)也会被解析。JSON 输出中包含的是展开后的数据 —— anchor 和 alias 只是 YAML 编写时的一种便利,并不是数据模型本身。

转换器如何处理 YAML 多文档文件?

多文档 YAML(文档之间用 `---` 分隔,可选用 `...` 结尾)会被转换为 JSON 数组,每个 YAML 文档对应数组中的一个元素。单文档文件则会输出单个 JSON 值,而不是数组。

YAML 的时间戳、布尔值等数据类型会怎样处理?

YAML 的类型系统比 JSON 更丰富。时间戳(`2024-01-15`)会被转换为 ISO-8601 字符串(JSON 中最可移植的表示形式)。布尔值(`true`、`false`、`yes`、`no`、`on`、`off`)会被规范化为 JSON 的 `true` 和 `false`。空值(`~`、`null`、空)则变成 JSON 的 `null`。

YAML 输入中的键顺序会保留吗?

会保留。YAML 1.2 的映射结构保持键的插入顺序,JSON 输出会沿用该顺序。但 JSON 规范本身并不保证键的顺序,某些消费方在重新排序键时会改变顺序。本工具自身是会保留顺序的。

限制说明

  • 不支持标准库之外的 YAML 自定义标签像 `!!python/object` 或 `!!java/com.example.Bean` 这样的 YAML 标签会被解析为字符串,但不会反序列化为对象。如果开启了「preserve tags」选项,标签前缀会保留在 `_tag` 键中。
  • 大型 YAML 文件可能产生深度嵌套的 JSONJSON 输出会完全镜像 YAML 的结构,因此可能产生几十层嵌套。部分 JSON 消费方(尤其是较老的解析器)对栈深度有限制,可能无法处理深度嵌套的输出。
  • 多文档 YAML 合并为单个 JSON 数组是有损转换把多个 YAML 文档合并为一个 JSON 数组时,文档分隔符注释和元数据会丢失。多个 YAML 文档在同一个文件中的语义分组方式无法传递到 JSON。

平台说明

macOS
命令行等价命令:`yq eval -o json input.yaml`(来自通过 Homebrew 安装的 yq 包)。在没装 yq、或者 YAML 是从聊天窗口直接粘贴过来时,这个浏览器工具就是合适的选择。
Linux
命令行等价命令:`python3 -c 'import yaml,json; print(json.dumps(yaml.safe_load(open("file.yaml")), indent=2))'`。对于结构复杂的 YAML,这个浏览器工具省去了手写引号和转义的麻烦。
Web
所有处理都在客户端完成。不会有任何 YAML 数据被上传。页面加载完成后可离线使用。
广告

相关工具

广告