SomeeLab.tools

YAML 与 JSON 互转

把 YAML 转成 JSON,也能反过来。锚点和合并键会被展开,缩进宽度可选。无需注册,转换在浏览器中完成,配置文件不会离开你的设备。

缩进

去掉引号就会变味的地方

YAML 会自己判断不带引号的值属于什么类型,事故往往就出在这里。

version: 1.10 被当成数字,结果是 1.1,末尾的零没了,版本号的意思也变了。zip: 01234 同样会变成数字 1234,开头的零掉了。邮政编码、工号、电话号码这类开头的零有含义的值,一定要写成 "01234"

12:30 这样的时刻写法,以及 noyeson,在这个工具里都保持字符串。不过按旧规范工作的解析器,比如 PyYAML 和 Ruby,会把 no 读成假值,国家代码 NO 变成 false 就是有名的例子。配置要经过好几种工具时,这些词也一并加引号更稳妥。

缩进的规矩

缩进只能用空格,制表符会直接报语法错误。如果编辑器默认插入制表符,在 YAML 文件里改成空格。

同一层级的条目必须严格对齐,差一列就会当场解析失败。这个工具会把出错的行号和列号原样告诉你。

锚点与合并键

&名字 给一段内容起名,*名字 把它取来用。再配上 <<:,就能把那段内容倒进另一个映射里。

defaults: &d
  retry: 2
  image: node
job:
  <<: *d
  script: test

这个工具会把合并键展开,所以输出的 JSON 里 job 中会有 retryimage。不展开的话会留下一个叫 "<<" 的键,后面根本没法用。GitLab CI 和 Docker Compose 的配置里经常见到这种写法。

转成 JSON 会丢掉什么

注释没了。JSON 没有注释语法,把配置转过去再覆盖原文件,之前写下的说明会全部消失,所以要留着原件。

多个文档也装不下。文件里如果有用 --- 分开的多份文档,这个工具会直接报错,而不是悄悄只输出第一份、让其余的不知不觉消失。像 Kubernetes 那种一个文件装多份清单的,请拆开一份份转。

日期会变成字符串。YAML 认得日期这种类型,JSON 里没有对应的东西。

反过来转的时候

把 JSON 转成 YAML,大部分引号会去掉,读起来轻松不少。但开头带零的字符串,以及看着像 true 的字符串,引号仍然保留。去掉它们意思就变了,留着才是对的。