UltKit

YAML转JSON转换器

把YAML配置、OpenAPI规范和CI文件转换成任何解析器、API或Schema校验器都能读取的JSON。上传 .yaml 或 .yml 文件,下载带缩进的JSON。

数据转换器

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

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

输出

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

使用方法

  1. 1

    上传YAML文件

    添加 .yaml 或 .yml 文件,一次最多 20 个,每个不超过 95 MB。文件名保持不变,生成的 JSON 文件沿用原名,只更换扩展名。

  2. 2

    选择缩进或紧凑格式

    格式化输出默认开启,会为 JSON 添加缩进,方便阅读和代码审查。如果需要单行文件以便粘贴到请求体中,可在高级设置中将其关闭。

  3. 3

    转换并使用

    点击转换为 JSON,下载后把文件交给 API、校验工具或需要它的脚本即可。

开发者为什么要把YAML转成JSON

YAML 是写给人看的:用缩进代替花括号,支持注释,大多数字符串无需引号。因此团队手工编辑的 Kubernetes 清单、GitHub Actions 工作流、Docker Compose 文件和 OpenAPI 规范都采用它。JSON 则是写给程序的。每种语言的标准库都有 JSON 解析器,浏览器原生支持解析,大多数 HTTP API 也只接受 JSON。

所以转换发生在两者的交界处。平台工程师要把清单交给只能读取 JSON 的 jq;后端开发者要把 OpenAPI 规范交给需要 JSON 的代码生成器;测试人员要把用 YAML 写的测试数据载入 JavaScript 测试套件。在这些场景中,YAML 始终是源文件,JSON 只是构建产物。如果要处理的是整个目录的数据源或导出文件,而不是配置,可以用 XML 转 JSON 以同样的方式处理较老的标记格式。

YAML与JSON的共同发展历程

Clark Evans 首次提出 YAML
2001
YAML 1.2 使 JSON 成为 YAML 的子集
2009
RFC 8259,当前的 JSON 标准
2017
YAML 1.2.2 修订版发布
2021

YAML特有的功能在JSON中如何处理

锚点(&defaults)及其别名(*defaults)让 YAML 可以复用一段内容。JSON 没有引用机制,所以每个别名都会被替换成该锚点内容的完整副本。

  • 生成的 JSON 可能明显比 YAML 更长
  • 合并键(<<: *defaults)也以同样方式展开
一个小型 YAML 配置转换后的格式化 JSON
{
  "service": "billing",
  "replicas": 3,
  "ports": [8080, 9090],
  "env": {
    "LOG_LEVEL": "info",
    "REGION": "NO"
  }
}

YAML与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 转换器

JSON

JavaScript 对象表示法

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

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

当面向人编写的配置或规范需要交给机器处理时,人们就会把 YAML 转成 JSON,例如 API 请求、模式校验器,或没有 YAML 解析器的工具。

YAML转JSON转换器常见问题

YAML和JSON存储的数据相同,为什么还要YAML转JSON?

因为很多工具只能解析其中一种。所有编程语言和浏览器都自带 JSON 解析,而 YAML 需要额外的库。REST API 的请求体、JSON Schema 校验器、jq,以及 package.json、浏览器扩展的 manifest.json 等文件,都要求使用 JSON。

YAML里的注释会怎样处理?

注释会被丢弃。RFC 8259 没有为 JSON 定义注释语法,以 # 开头的行无处安放。建议把 YAML 文件作为带注释的源文件保存,把 JSON 当作随时可以重新生成的副本。

为什么NO或off变成了false?

遵循 YAML 1.1 的解析器会把 yes、no、on、off 当作布尔值,所以代表挪威的国家代码 NO 可能变成 false。YAML 1.2 只把 true 和 false 视为布尔值,但并非所有工具都遵循。请在 YAML 中给这类值加引号,例如 "NO",这样它在 JSON 中仍是字符串。

能转换YAML格式的CloudFormation模板吗?

AWS CloudFormation 同时支持两种格式,但 !Ref、!GetAtt 这类简写标签只存在于 YAML。JSON 模板要写成完整函数,如 {"Ref": "MyBucket"} 或 {"Fn::GetAtt": [...]}。转换前请先把简写标签改成完整写法,以保证 JSON 模板有效。

如何反过来把JSON转成YAML?

请使用 JSON 转 YAML。当 API 响应或生成的文件需要变成仓库里便于阅读的配置文件时,通常就是这个方向。