常见问题
YAML 的锚点和引用(& *)支持吗?
暂不支持,遇到会按普通标量处理。转换前请先把锚点展开。
生成的 YAML 用什么缩进?
按 YAML 规范用 2 个空格,不用 Tab(Tab 在 YAML 里非法)。
多行文本怎么处理?
保留多行结构,不会压成一行。
关于这个工具
JSON 转 YAML 用 2 个空格缩进(YAML 里 Tab 非法),对象数组写成 - key: value 后接其余键,空数组输出 []、空对象 {}。字符串只在含特殊字符时才加引号,能裸写就裸写 —— 这是 YAML 可读性好的原因,也是它的坑:"true" 与 true、"1.0" 与 1.0 在 YAML 里是不同类型,带引号输出才不会在别处被误读成布尔或数字。
反向的解析器是自举的 YAML 子集实现,不是完整 YAML 解析器。支持:块映射、块序列、按缩进嵌套、整行 # 注释、单双引号字符串、--- / ... 文档标记。不支持:锚点与引用(& *)、合并键 <<、多行块标量(| >)、流式写法({a: 1}、[1, 2])、标签(!!str)。
不支持的部分会静默降级而不是报错,这是最需要留意的地方:command: | 会把值解析成字符串 "|",紧跟的缩进块整体被跳过 —— 从 Kubernetes、GitHub Actions 的配置里拿一段带 | 的 YAML 来转,得到的是残缺的 JSON。用之前先确认目标文件里没有这些语法。
类型推断只认 null / ~、true / false、整数、小数。yes、no、on、off(YAML 1.1 里是布尔)会按字符串处理,1e3 和日期同理,跨工具传递时请按接收端的实际行为核对。行尾注释(key: value # 说明)不会被剥掉,会连同 # 一起进值里,注释请单独占一行。