YAML 转 JSON 在线工具 — YAML JSON 格式转换
把 YAML 转成 JSON(安全模式、锚点与合并键、错误行号)
在浏览器中处理 · 不上传任何内容
功能简介
配置常常用 YAML 编写,而程序之间交换数据用的是 JSON。这个工具把 YAML 转换成 JSON。输入时结果会实时更新,语法错误会按行号和列号报告。
使用方法
- 把 YAML 粘贴到输入框。
- 为 JSON 输出选择 2 个空格、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 数组,并提示找到了几个文档。