ToolDeck

YAML 转 JSON

将 YAML 转换为 JSON 格式

加载示例

YAML 输入

JSON 输出

本地运行 · 粘贴密钥安全无忧
JSON 将在此处显示…
也可以试试:YAML to XML

什么是 YAML 转 JSON 转换?

YAML 转 JSON 转换是将 YAML(YAML Ain't Markup Language)格式的数据转换为 JSON(JavaScript Object Notation)格式的过程。两种格式均以键值对、序列和嵌套对象表示结构化数据,但语法不同。YAML 使用缩进和简洁的标点符号,而 JSON 使用花括号、方括号和强制引号。当需要在不同系统之间传递配置数据时,二者之间的转换是一项常见任务。

YAML 专为人类可读性而设计,支持注释、多行字符串、锚点和别名——而这些特性在 JSON 中均不存在。将 YAML 转换为 JSON 时,这些 YAML 特有功能会被解析处理:锚点被内联展开,注释被丢弃,多行块变为转义字符串。输出结果是任何 JSON 解析器都能读取的有效 JSON。

YAML 1.2 规范明确将 JSON 定义为 YAML 的子集,即每个有效的 JSON 文档同时也是有效的 YAML。反之则不然。使用注释、锚点或复杂键的 YAML 文档没有直接对应的 JSON 形式,转换时必须进行简化处理。本工具可自动完成该转换,将任何有效的 YAML 输入转换为格式规范的 JSON。

YAML 1.2 Specification — yaml.org →

为什么使用在线 YAML 转 JSON 转换器?

手动将 YAML 转换为 JSON 容易出错,尤其是面对深层嵌套结构或多行值时。基于浏览器的转换器能即时给出结果,并在 YAML 语法错误进入应用程序之前将其捕获。

在浏览器中即时转换
粘贴 YAML 即可在毫秒内获得格式化的 JSON 输出。无需安装 CLI 工具,无需构建步骤,也无需管理任何依赖项。
🔀
支持任意有效的 YAML 结构
支持嵌套映射、序列、多行字符串(原始块和折叠块)、锚点、别名、合并键以及所有 YAML 1.2 标量类型。
🔒
数据完全私密
所有解析均使用 JavaScript 在浏览器本地进行。您的 YAML 内容永远不会发送到服务器,因此即使是包含凭据或内部路径的配置文件也可以安全使用。
📋
复制或调整输出格式
可在 2 空格和 4 空格缩进之间切换。一键将 JSON 结果复制到剪贴板,直接用于代码、API 请求或配置文件。

YAML 转 JSON 使用场景

前端开发
将设计系统或 CMS 中的 YAML 配置文件转换为 JSON,供 JavaScript 打包工具、REST API 或需要 JSON 输入的 i18n 库使用。
后端开发
将 Spring Boot 的 application.yml 或 Rails 的 database.yml 转换为 JSON,以便输入到只接受 JSON 配置的部署脚本、API 网关或服务中。
DevOps 与 CI/CD
将 docker-compose.yml、GitHub Actions 工作流或 Kubernetes 清单转换为 JSON,用于验证工具、OPA 等策略引擎,或配合 jq 进行调试。
QA 与测试
将 YAML 测试夹具转换为 JSON 载荷,供 Postman、Insomnia 等 API 测试工具或需要 JSON 请求体的自动化测试套件使用。
数据工程
将 YAML 格式的流水线定义(Airflow、dbt、Dagster)转换为 JSON,用于数据模式验证、程序化处理或与元数据目录集成。
学习与文档编写
在学习配置格式或编写文档时,快速查看 YAML 结构如何映射到对应的 JSON 形式。

YAML 转 JSON 类型映射参考

每种 YAML 数据类型在转换过程中都映射到特定的 JSON 类型。下表列出了各 YAML 构造及其对应的 JSON 输出。了解这些映射关系有助于预测 YAML 数据转换后的形态,避免布尔值或 null 值等类型出现意外结果。

YAML 类型YAML 语法JSON 输出
Mappingname: Alice{ "name": "Alice" }
Sequence- apple\n- banana["apple", "banana"]
Stringgreeting: hello world"hello world"
Integercount: 4242
Floatratio: 3.143.14
Booleanactive: truetrue
Nullvalue: nullnull
Multiline (|)bio: |\n Line one\n Line two"Line one\nLine two\n"
Folded (>)note: >\n A long\n paragraph"A long paragraph\n"
Anchor/Alias&default\n <<: *defaultResolved inline (no $ref)

YAML 与 JSON 语法对比

YAML 和 JSON 表示相同的数据模型,但语法规则不同。以下差异解释了为何注释、锚点等 YAML 特性在 JSON 中没有等价形式。

YAML
使用缩进表示嵌套(无花括号)。支持以 # 开头的注释。字符串通常无需引号。支持以 |(原始块)和 >(折叠块)表示多行值。支持锚点(&名称)和别名(*名称)以实现复用。在 YAML 1.2 中,只有 true 和 false 被识别为布尔值;旧版 YAML 1.1 解析器还接受 yes、no、on 和 off,但这些在 YAML 1.2 中被视为普通字符串。
JSON
使用花括号和方括号表示嵌套。不支持注释语法。所有字符串必须用双引号括起。不支持多行字符串字面量——改用 \n 转义序列。没有锚点或别名机制。布尔值严格为小写 true 和 false。所有键必须为带引号的字符串。不允许尾随逗号。

代码示例

以下是以编程方式将 YAML 转换为 JSON 的示例。每个示例均解析一个 YAML 字符串并输出格式化的 JSON。

JavaScript (Node.js)
import { load } from 'js-yaml'

const yamlStr = `
server:
  host: localhost
  port: 8080
  ssl: true
`

const json = JSON.stringify(load(yamlStr), null, 2)
console.log(json)
// → {
// →   "server": {
// →     "host": "localhost",
// →     "port": 8080,
// →     "ssl": true
// →   }
// → }
Python
import yaml, json

yaml_str = """
database:
  host: db.example.com
  port: 5432
  credentials:
    user: admin
    password: s3cret
"""

data = yaml.safe_load(yaml_str)
print(json.dumps(data, indent=2))
# → {
# →   "database": {
# →     "host": "db.example.com",
# →     "port": 5432,
# →     "credentials": {
# →       "user": "admin",
# →       "password": "s3cret"
# →     }
# →   }
# → }
Go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"gopkg.in/yaml.v3"
)

func main() {
	yamlData := []byte(`
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
`)

	var obj map[string]interface{}
	if err := yaml.Unmarshal(yamlData, &obj); err != nil {
		log.Fatal(err)
	}
	jsonBytes, _ := json.MarshalIndent(obj, "", "  ")
	fmt.Println(string(jsonBytes))
	// → { "services": { "web": { "image": "nginx:latest", "ports": ["80:80"] } } }
}
CLI (yq + jq)
# Convert a YAML file to JSON with yq
yq -o=json config.yaml > config.json

# Pipe YAML into yq for one-off conversion
echo "name: demo" | yq -o=json
# → { "name": "demo" }

# Python one-liner (no extra install on most systems)
python3 -c "import yaml, json, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < config.yaml

常见问题

YAML 是 JSON 的超集吗?
是的,自 YAML 1.2(2009 年发布)起。每个有效的 JSON 文档同时也是有效的 YAML。YAML 规范经过专门更新以确保与 JSON 完全兼容。但反之不成立——注释、锚点和未引号键等 YAML 特性在 JSON 中没有等价形式。
YAML 注释在转换时如何处理?
注释会被丢弃。JSON 没有注释语法,因此 YAML 输入中所有以 # 开头的行在转换过程中都会丢失。如需保留注释,请将原始 YAML 文件作为数据来源,并在需要时从中生成 JSON。
YAML 锚点和别名如何处理?
锚点(&名称)和别名(*名称)在解析时会被解析展开。别名会被替换为锚定数据的完整副本。生成的 JSON 不含任何引用——所有值均被内联展开。合并键(<<: *名称)以相同方式处理。
YAML 转 JSON 会丢失数据吗?
对于数据值本身,不会。所有 YAML 标量类型(字符串、数字、布尔值、null)都有对应的 JSON 等价类型。会丢失的内容包括:注释、标签指令、锚点名称,以及块格式与流格式之间的区别。如果 YAML 中使用了自定义标签(如 !!python/object、!!timestamp),这些标签会被解析为普通值,或根据解析器的不同而导致解析错误。
为什么 YAML 布尔值 'yes' 在 JSON 中变成了字符串?
本工具使用 js-yaml v4,遵循 YAML 1.2 的布尔值解析规则。只有 true 和 false(任意大小写)被识别为布尔值。yes、no、on 和 off 被视为普通字符串,在 JSON 输出中以带引号的字符串形式呈现。如果发现本应为布尔值的地方出现了意外的字符串值,请在 YAML 源文件中将其改为 true 或 false。
本工具能处理的最大 YAML 文件大小是多少?
本工具在浏览器中运行,因此上限取决于您设备的可用内存。实际使用中,数兆字节以内的文件均可正常转换。对于非常大的文件(50 MB 以上),建议使用 yq 等 CLI 工具或配合 PyYAML 的 Python 脚本,因为它们可以流式处理数据,而非一次性将所有内容加载到内存中。
YAML 多行字符串如何转换为 JSON?
YAML 有两种多行块标量样式。原始块(|)在 JSON 字符串中以 \n 字符保留换行符。折叠块(>)将单个换行符替换为空格,将多行内容合并为一个段落。两种样式默认在末尾追加一个换行符,可使用截断指示符(|- 或 >-)去除。