博客
简体中文

YAML 转 JSON 在线工具 — YAML JSON 格式转换

把 YAML 转成 JSON(安全模式、锚点与合并键、错误行号)

在浏览器中处理 · 不上传任何内容

JSON 结果

功能简介

配置常常用 YAML 编写,而程序之间交换数据用的是 JSON。这个工具把 YAML 转换成 JSON。输入时结果会实时更新,语法错误会按行号和列号报告。

使用方法

  1. 把 YAML 粘贴到输入框。
  2. 为 JSON 输出选择 2 个空格、4 个空格、制表符或压缩。
  3. 复制结果。
  4. 如果错误提示了行号和列号,检查那附近的缩进、引号以及冒号后面的空格。

工作原理

  • 使用 js-yaml 按 YAML 1.2 核心模式(core schema)解析。只有 true/false、null(或 ~)、十进制、八进制和十六进制整数以及浮点数会被读成布尔值、null 和数字,其余都是字符串,加了引号的 "123" 一定是字符串。
  • 不支持自定义标签和 !!js/function 这类代码标签,遇到时会报错。任何内容都不会被当作代码执行。
  • 锚点(&)和别名(*)会展开成具体的值,<< 合并键也会被解析。同一个映射里键重复会报错。
  • 错误位置的行号和列号从 1 开始。
  • 多个文档会被包进一个数组。输入为空时报错。
  • JSON 无法表示的值按 JSON 自身的规则转换,因此 .inf 和 .nan 会变成 null。超过 2^53 的整数在读成 JavaScript 数字时会被舍入。

示例

输入:

base: &b
  x: 1
item:
  <<: *b
  name: 张三

结果:

{"base": {"x": 1}, "item": {"x": 1, "name": "张三"}}

常见问题

像 !!js/function 这样的标签会被执行吗?

不会。工具使用只读取普通数据(字符串、数字、布尔值、null、数组和对象)的安全模式。自定义标签和函数永远不会运行,并会作为错误报告。

在哪里看 YAML 哪里写错了?

解析失败时会显示检测到问题的行号和列号,以及解析器给出的说明。常见原因是缩进错误、引号或括号没有闭合。检测到的位置可能紧跟在真正出错的地方之后,所以也要看看它上面几行。

yes、no、on、off 会变成布尔值吗?

不会。按照 YAML 1.2,只有 true 和 false 是布尔值,yes、no、on、off 仍是字符串。像 2024-01-02 这样的日期形式也保持为普通字符串,不会变成日期对象。

为什么会出现“别名过多”的错误?

出于安全考虑,一个文档最多只能有 100 个别名。通过层层嵌套别名让输出指数级膨胀的输入(别名炸弹)可能让浏览器标签页卡死,因此工具同时限制了别名数量和结果大小(约 5 MB)。普通配置文件远远达不到这些上限。

输入里有多个用 --- 分隔的文档怎么办?

只有一个文档时输出它的值。有两个及以上时,按顺序输出由这些文档组成的 JSON 数组,并提示找到了几个文档。

没找到想要的工具?