piapia123
zh

YAML ↔ JSON 互转

格式化

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

把一份 YAML 配置转成 JSON,或反过来。多文档(用 --- 分隔的那种,k8s 的一份配置里放好几个资源)会解析成 JSON 数组而不是只转第一个;锚点、别名与 << 合并键都会展开成实际内容,而不是把 << 原样留下当成一个键名。解析用的是完整的 YAML 实现,所以多行标量、流式写法、隐式类型这些边角都能正确处理 —— 自己写一个「够用」的子集,迟早会在某个输入上静默解析成另一个意思,而用户拿这份配置去部署时已经没有任何线索了。出错时会给出行与列。

功能

  • 两个方向:YAML 转 JSON、JSON 转 YAML,方向可自动判断也可手动指定
  • 多文档 YAML 解析成 JSON 数组,不会只转第一个文档
  • 锚点与别名展开成实际内容,<< 合并键按规范展开
  • 大整数按 BigInt 处理:超过 2^53 的整数以字符串输出,位数一个不丢
  • 解析错误指到具体的行与列,而不是一句「格式不对」
  • 输出形态可选:逐层展开,或压成一行(紧凑);JSON 缩进支持 2 / 4 空格与制表符
  • 输出带语法着色,长配置一眼能看清结构

使用方法

  1. 把 YAML 或 JSON 粘进输入框 —— 能解析成 JSON 的按 JSON 处理,其余按 YAML
  2. 结果实时出现,方向也可以手动指定
  3. 需要压成一行就选「紧凑」,需要调缩进就选缩进方式
  4. 点复制取走结果

常见问题

为什么注释、锚点和原始排版都不见了?
JSON 里没有可以承载注释与锚点的结构 —— 它只有对象、数组和标量。锚点与别名会被展开成它们指向的实际内容(这是有损但语义正确的转换),注释则只能丢弃。如果这份注释很重要,请在转换后把它挪到 JSON 之外保存。
为什么大整数在 JSON 里变成了字符串?
因为 JSON 没有大整数类型,而 JavaScript 的数字超过 2^53 之后相邻整数就无法区分了:9007199254740993 会被静默变成 ...992。与其输出一个看起来正常、其实已经错了一位的数字,不如输出成字符串 —— 类型变了,但值一个字符不差,而且你在结果里看得见这个变化。
YAML 1.1 里的 yes / no 在这里是布尔吗?
不是。这里按 YAML 1.2 处理:yes、no、on、off 都是普通字符串,只有 true 和 false 才是布尔。这一点很重要 —— 拿 1.1 的解析器读同样一份文件,`password: no` 会变成布尔值,然后你的密码就成了 false。
内容会上传吗?
不会。解析与转换全在浏览器里完成,页面不发送任何请求 —— 配置文件里常常有密钥、连接串和内部地址,它们不会离开这台设备。

相关工具