跳到主要内容
PulsarKit

YAML转JSON

一个工具,两个方向:转换方向根据文件判断,支持多文档YAML,每个错误都会指出行号。

把文件拖到这里

.yaml, .yml, .json, .txt · 最大300 MB

方向
更多设置

如何把YAML转成JSON,或者反过来转换

  1. 1

    拖入YAML或JSON文件

    添加一个文件,或者最多二十个。.yaml、.yml和.json扩展名都能识别,一批文件里可以随意混用。

  2. 2

    检查识别出的方向

    方向根据扩展名判断;纯文本文件则根据内容判断。自动判断不符合你的意思时,随时可以改。

  3. 3

    转换并下载

    点击按钮,保存转换后的文件。多个文件会打包成一个ZIP压缩包。

为什么方向要小心判断

每个有效的JSON文档同时也是有效的YAML,所以如果先用YAML解析器测试文件,普通的.json文件会被当成YAML,转换成它自己。因此扩展名优先:.json转成YAML,.yaml和.yml转成JSON。只有.txt和其他没有标明类型的输入才由内容决定,出于同样的原因,先尝试JSON。

重复的键是错误,不是偏好

在JSON里,重复的键悄悄以最后一个值为准。在YAML里,同样的重复是值得停下来的错误,因为它恰恰出现在配置文件里:docker-compose.yml在同一层级把ports写了两次,第一个列表就被悄悄覆盖,而发现问题往往已经是在生产环境。工具会报告两处的行号,让你看清哪个定义差点消失。

四种模式,更窄的模式有什么用

默认模式解析常见的YAML类型,包括日期和二进制数据块。core和json依次更严格,failsafe只识别字符串、映射和序列。配置必须按字面数据读取时,选一个窄的模式:它能避免YAML的经典意外,比如版本号变成浮点数、no变成false。

配置文件留在你的电脑上

配置文件里有主机名、端口、存储桶名称,有时还有更敏感的内容,所以这个转换在你的浏览器标签页里完成,而不是在服务器上。解析和输出都在本地运行,放在一个工作线程(worker)中,用的是随页面加载的代码。文件不上传,不排队,关闭标签页后什么也不会留下。

常见问题

转换方向是怎么决定的?

首先看文件扩展名:.json转成YAML,.yaml和.yml转成JSON。.txt和其他没有标明类型的文件由内容决定:先尝试按JSON解析,再按YAML解析。两种都解析不了时,工具会告诉你,你可以自己选方向。

包含多个文档的YAML文件会怎么处理?

用---分隔的文件两种方式都能读。开启多文档模式时,每个文档成为一个JSON数组里的一个元素。关闭时只转换第一个文档,并给出一条不影响操作的警告,说明其余部分被忽略了,所以结果被截断时一定会有提示。

为什么重复的键会被当成错误?

因为在YAML里,第二个定义会覆盖第一个,而且没有任何迹象。配置文件里丢掉端口映射或环境变量,常常就是这样发生的。转换会停下来,指出这个键和两处的行号,由你决定哪个定义才是本意。

failsafe模式是什么,什么时候需要?

failsafe只解析字符串、映射和序列,不会把任何值变成数字、布尔值、日期或null。配置必须按字面保留时,它是正确的选择,比如1.10这样的值是版本号而不是数字,或者“挪威问题”把国家代码no变成了false。

YAML注释会保留到JSON里吗?

不会,也不可能保留。JSON根本没有注释的语法,所以#后面的内容在转换时都会去掉。这是目标格式本身的特性,不是工具的缺陷;如果注释对你很重要,就把YAML当作源文件保留。

流式层级(flow level)改变的是什么?

它决定YAML输出从哪一层嵌套开始,由带短横线和缩进的块样式切换成[a, b]和{a: b}这样的行内样式。默认所有层级都用块样式,手工编辑的配置文件这样最好读。设置一个正数深度,会把它以下的内容都压缩成行内样式,适合嵌套很深的数据。

支持锚点和别名吗?

不支持。锚点、别名和合并键(&defaults、*defaults和<<),以及自定义的应用标签,都不在这个工具读取的范围内。使用了它们的文件会得到一条指出行号的明确错误,而不是一个悄悄出错的结果;对于马上要部署的配置文件,这样失败更安全。

我的文件会上传到别处吗?

不会。两个解析器都随页面加载,在你的浏览器标签页里运行,所以你的配置文件从不经过网络传输。没有服务器端组件来保存它,关闭标签页后也什么都不会保留。

相关工具