极简工具箱

免费在线工具 · 本地计算 · 无需上传

YAML 与 JSON 互转

Docker Compose、K8s、CI、各类 AI 框架配置几乎都用 YAML,接口数据却多是 JSON。两者互转看着简单,但缩进、类型推断和注释丢失经常让人踩坑。

广告位(百度联盟)

一、最核心的规则:缩进用空格

YAML 用缩进表示层级,且只允许空格,不允许 Tab。同一层级的元素必须对齐,缩进多少个空格没有强制规定(常见 2 或 4),但整个文件要一致。这一条能解释绝大多数「解析失败」:

# 正确
server:
  port: 8080
  tags:
    - web
    - api

# 错误:混用 Tab、同级没对齐
server:
port: 8080

另外 key: value 冒号后面必须有一个空格,port:8080 会被当成普通字符串而不是键值对。

二、类型是怎么被猜出来的

YAML 不像 JSON 那样所有标量都带引号,解析器会按字面量推断类型,这是互转时最容易出意外的地方:

所以版本号 1.0、开关 on/off、纯数字编号、日期字符串,想当字符串就加引号。一个经典事故是配置里 version: 1.0 转成 JSON 变成 1,或者用户名 no 变成 false。转成 JSON 后务必抽查这些字段的类型。

三、JSON 没有、YAML 有的东西

四、互转时的检查清单

① 缩进全是空格、层级对齐;② 需要字符串的标量加了引号;③ 注释是否需要另存;④ 锚点展开后有没有意外的重复键;⑤ 日期、布尔、数字类型是否符合目标系统预期;⑥ 数组与对象的嵌套层级是否一致。特别是 K8s / Compose 这类对类型敏感的配置,一个 true 变成 "true" 就可能让行为完全不同。

做转换时可以用 YAML 与 JSON 互转,左右对照即时看结果;配合 JSON 格式化校验 确认输出是合法 JSON。转换在浏览器本地完成,配置文件不用上传到外部服务。

五、什么时候该用哪个

给人编辑、需要注释和复用的配置文件,YAML 可读性明显更好;机器之间传数据、需要严格类型和广泛兼容,JSON 更稳妥。很多项目的做法是「源配置用 YAML,构建/运行时编译成 JSON」。

小结

记住三件事:只用空格缩进且冒号后带空格;YAML 会猜类型,拿不准就加引号;注释和锚点在转到 JSON 时会丢或展开。转换后抽查几个关键字段,比事后排查配置事故省事得多。

本文相关工具(本地计算,无需上传)

更多使用教程