UltKit

JSON转YAML转换器

把JSON改写成便于阅读、审查和添加注释的YAML。上传.json文件,即可得到缩进规范的.yaml文件,键、值和顺序保持不变,可直接放入代码仓库。

数据转换器

或将CSV, TSV, TXT … 文件拖放到此处 ·

单个文件最大 95 MB· 最多 20 个文件· 30 分钟后删除

输出

文件在我们的服务器上处理,并在 30 分钟后删除。

使用方法

  1. 1

    添加JSON文件

    上传 API 响应、导出的设置或生成的清单,格式为 .json,最多 20 个文件,每个不超过 95 MB。每个文件必须包含一个有效的 JSON 值。

  2. 2

    保持默认设置

    转换为 中已默认选中 YAML。配置文件无需再改其他设置,输出使用两个空格缩进。

  3. 3

    转换并提交

    点击 转换为 YAML,下载 .yaml 文件,在后续维护者需要的地方添加注释,然后提交。

答案

如何把 JSON 转换为 YAML?

上传 .json 文件,点击 转换为 YAML。对象会变成带缩进的 key: value 块,数组会变成带短横线的列表,而 YAML 可能误读的字符串会保留引号。

为什么配置文件要从JSON转为YAML

大多数 JSON 由软件生成:API 响应、设置导出、生成器的输出。大多数 YAML 则由人来维护。转换通常标志着数据不再是机器输出,而变成团队自己负责的内容,例如提交到 Git 的部署清单、CI 流水线或一组 Ansible 变量。

典型场景:你调用云 API,得到一份 200 行的资源 JSON 描述,想把它保存为基础设施代码。转换后得到的文件没有花括号和逗号,改动一行只产生一行差异,还可以用注释解释奇怪的值。测试数据和由非开发人员编辑的翻译文件也是如此。如果你需要的是用于电子表格或报告的扁平表格,JSON 转 CSV 更合适。

使用YAML配置文件的工具

转换后的YAML通常用在哪里
机构要求来源
GitHub Actions工作流位于 .github/workflows 中,为 .yml 或 .yaml 文件GitHub 文档
GitLab CI/CD流水线定义在仓库根目录的 .gitlab-ci.yml 中GitLab 文档
Docker Compose服务在 compose.yaml(原 docker-compose.yml)中描述Docker 文档
AnsiblePlaybook 和变量文件使用 YAML 编写Ansible 文档
Kubernetes清单支持 JSON 或 YAML;文档和 Helm chart 使用 YAMLKubernetes

含特殊值的JSON转YAML示例

{"name":"api","version":"1.10","debug":false,"tags":["网站","欧盟"],"country":"NO"} 的 YAML 输出
name: api
version: "1.10"
debug: false
tags:
  - 网站
  - 欧盟
country: "NO"

YAML 的优点

  • 可用 # 添加注释
  • 代码评审中的差异更短
  • 大多数行没有花括号、逗号或引号
  • 可用 | 块标量写多行文本

需要注意

  • 缩进即含义,多一个空格就会改变结构
  • 不允许用制表符缩进
  • 不加引号的字符串可能被读成数字或布尔值
  • 解析器比 JSON 更慢,也更不统一

这个示例说明了为什么仅仅替换花括号是不够的。版本号 1.10 在 JSON 中是字符串;在 YAML 中如果不加引号,会被读成数字 1.1。NO 是挪威的 ISO 代码,在 PyYAML 等 YAML 1.1 解析器中会被读成 false。两者都保留了引号,而真正的数字和布尔值则保持无引号。

JSON与YAML对比

JSON

JavaScript 对象表示法

JSON 是一种轻量级结构化数据文本格式,由 Douglas Crockford 在 21 世纪初推广,并被标准化为 RFC 8259 和 ECMA-404。它用简单易读的语法表示对象、数组、字符串、数字、布尔值和 null。它是网络 API、配置文件以及几乎所有编程语言之间数据交换的默认格式。它没有内置注释、日期或模式,嵌套很深的大文件没有查看器就很难阅读。

压缩方式
–
透明度
–
动画
–
发布年份
2001 · Douglas Crockford
JSON 转换器

YAML

YAML

YAML(“YAML Ain't Markup Language”)是 2001 年首次发布的易读数据格式。它用缩进代替括号,支持注释,并且是 JSON 的超集。Docker Compose、Kubernetes、GitHub Actions 和许多应用都广泛用它来做配置。它依赖空白字符,一个多余的空格就可能让文件出错,而且某些值(如“no”或日期)可能被意外解析。

压缩方式
–
透明度
–
动画
–
发布年份
2001 · Clark Evans, Ingy döt Net, Oren Ben-Kiki
YAML 转换器

当生成的数据或 API 数据需要变成由人维护、在拉取请求中评审并可以用注释说明的配置文件时,人们就会把 JSON 转换为 YAML。

JSON转YAML转换器常见问题

JSON本身就是合法的YAML吗?

在 YAML 1.2 中是的:2009 年的修订版在设计时就让每一个 JSON 文档同时也是 YAML 文档。你可以把 JSON 直接粘贴到 .yaml 文件中,大多数工具都能识别。转换的意义在于可读性:没有花括号、引号和逗号的块状写法,正是评审者和后续维护者期望的样子。

为什么YAML中有些值被加上了引号?

因为不加引号的话,YAML 会把它们读成其他类型。像 1.10 这样的版本号会变成数字 1.1,而 yes 或 off 在旧版解析器中可能变成布尔值。看起来像数字、日期或布尔值的字符串需要加引号才能保持为字符串,所以认真的转换会保留这些引号。

转换后可以添加注释吗?

可以,这也是很多人转换的原因。在行尾或单独一行写 # 加上你的说明即可。JSON 无法解释某个值为什么这样设置,而 YAML 可以,这让评审和交接更轻松。

为什么YAML报制表符(Tab)错误?

YAML 规范禁止用制表符缩进,只有空格才算数。转换器输出的是空格,但如果编辑器设置为插入制表符,下次编辑时可能会破坏文件。请把编辑器设置为在 .yaml 文件中使用空格。

转换后的清单Kubernetes能识别吗?

kubectl 同时支持 JSON 和 YAML,所以两种写法的数据是一样的;YAML 版本只是大多数文档、Helm chart 和代码评审所采用的形式。如果之后需要把它变回 JSON 用于 jq 或 API 调用,可以用 YAML 转 JSON 反向转换。