YAML 转 JSON 转换器
粘贴 YAML 即时获得 JSON,浏览器端实时转换。支持 K8s 清单、OpenAPI 规范、Helm values 和 Ansible playbook,完整展开锚点/别名,100% 隐私保护,数据不离开设备。
什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级、基于文本的数据交换格式,标准化为 RFC 8259 和 ECMA-404。它支持六种数据类型 — 字符串、数字、布尔值、null、数组和对象 — 语法严格简洁,几乎所有编程语言、API 和工具链都能原生解析。YAML 是人工编写配置文件(Kubernetes 清单、GitHub Actions、Ansible playbook、Helm values)的首选格式,而 JSON 是 API、自动化脚本和编程式数据处理的通用机器可读格式。
因此,将 YAML 转换为 JSON 是 DevOps 和后端开发中最常见的任务之一 — 你有 YAML 配置文件,但需要 JSON 来输入 REST API、用 jq 查询或通过 JavaScript 工具处理。
与典型的在线转换器相比,本工具有四个重要差异点:
**1. 多文档 YAML 处理。** YAML 支持在单个流中包含多个文档,以 ---(文档起始标记)分隔。许多真实 YAML 文件(包括部分 Kubernetes 清单和 Ansible playbook)包含多个文档。本工具使用 eemeli/yaml 库的 parseAllDocuments,配合 { version: '1.2', merge: true } 选项,返回第一个文档的 JSON,并清晰说明取用了哪个文档。如需所有文档,请按 --- 拆分后逐段转换。
**2. 锚点和别名展开。** YAML 锚点(&name)和别名(*name)允许复用数据块 — 这是 JSON 没有等价概念的强大 YAML 特性。本工具完全展开所有锚点和别名(包括合并键:<<: *anchor),使 JSON 输出包含完整的自包含数据,无任何引用。这始终是正确的转换方式,因为 JSON 没有引用语法。展开由 eemeli/yaml 库安全处理,包含循环引用保护。了解反向转换,请访问 JSON 转 YAML 转换器。
**3. 注释丢失 — 透明说明。** YAML 支持 # 注释,Kubernetes 清单、Helm values 和 Ansible playbook 中常用注释来记录意图。JSON 没有注释语法,因此注释在转换时会永久丢失。这不是缺陷,而是格式间的根本差异。本工具对此明确说明,让你了解预期行为。如需保留注释信息,请将其编码为 JSON 字段(_comment 键或专用 metadata 对象),或将 YAML 作为权威来源保留。详见我们的 YAML Norway 问题与 JSON-YAML 差异详解。
**4. 100% 浏览器端隐私保护。** 你的 YAML 数据(通常包含 Kubernetes 密钥、数据库凭证、带密码的 Helm values 以及内部服务配置)永远不会离开浏览器。数据不会发送到任何服务器。你可以通过浏览器的「网络」标签验证这一点。转换为 JSON 后,可以在使用前通过 JSON 格式化工具验证和格式化结果。
YAML 的丰富性(注释、锚点、多文档支持、块标量)使其非常适合人工编写的配置文件,可读性和文档记录至关重要。JSON 的严格性和通用性使其在机器为主要使用者时是更好的选择。本转换器连接两个世界:以 YAML 保存配置以便人工维护,在需要机器可读的交换格式时转换为 JSON。
// Convert YAML to JSON in Node.js using the eemeli/yaml library
import { parseAllDocuments } from 'yaml';
const yamlString = `apiVersion: apps/v1
kind: Deployment`;
// parseAllDocuments handles multi-document YAML (--- separator)
// version: '1.2' ensures yes/no are strings, not booleans
// merge: true expands anchor/alias merge keys (<<: *anchor)
const docs = parseAllDocuments(yamlString, { version: '1.2', merge: true });
// Take the first document (skip additional --- blocks)
const json = JSON.stringify(docs[0].toJSON(), null, 2);
console.log(json);
// {
// "apiVersion": "apps/v1",
// "kind": "Deployment"
// } 核心功能
实时转换
输入或粘贴 YAML 时,JSON 输出即时更新 — 无需点击「转换」按钮。大型输入(>200KB)自动切换为手动模式以保持浏览器响应。
2 或 4 空格缩进
在 2 空格和 4 空格缩进之间切换,用于 JSON 输出。2 空格是大多数工具和 API 的标准格式;4 空格符合部分风格指南和编辑器默认设置。
多文档支持
支持包含多个 --- 分隔文档的 YAML 流,将第一个文档转换为 JSON 并返回。适用于 Kubernetes 多资源文件和 Ansible playbook。
锚点和别名展开
完全展开 YAML 锚点(&name)和别名(*name),包括合并键(<<: *anchor)。JSON 输出包含完整的去引用数据,没有任何引用 — 这是正确行为,因为 JSON 没有等价概念。
100% 浏览器端隐私
所有转换均在浏览器中使用 JavaScript 本地运行。你的 YAML 数据(包括密钥、凭证和生产配置)不会发送到任何服务器,不会被记录,也不会被存储。
支持 K8s、Compose、Helm 和 OpenAPI 文件
针对真实 DevOps 场景优化:Kubernetes 清单、Docker Compose 栈、Helm chart values、GitHub Actions 工作流、OpenAPI 规范和 Ansible playbook — 每种场景均附有示例。
示例
Kubernetes Manifest
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: production
labels:
app: my-app
version: 1.0.0
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0.0
ports:
- containerPort: 8080
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 128Mi
cpu: 500m 将 Kubernetes Deployment 清单从 YAML 转换为 JSON — 适用于通过 jq 查询、发送到 Kubernetes API 或输入 Terraform 和 CI/CD 流水线
Docker Compose
version: '3.9'
services:
web:
image: nginx:1.25-alpine
ports:
- '80:80'
- '443:443'
environment:
NGINX_HOST: example.com
NGINX_PORT: '80'
depends_on:
- db
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata: {} 将 Docker Compose YAML 转换为 JSON,用于编程操作、输入自动化脚本或通过 JavaScript 工具处理
GitHub Actions 工作流
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run tests
run: pnpm test 将 GitHub Actions 工作流 YAML 解析为 JSON,以查询特定字段、验证结构或与接受 JSON 的 API 集成
OpenAPI 规范
openapi: 3.0.3
info:
title: User API
version: 1.0.0
description: Manage application users
paths:
/users:
get:
summary: List users
operationId: listUsers
parameters:
- name: limit
in: query
schema:
type: integer
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
/users/{id}:
get:
summary: Get user
operationId: getUser
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
components:
schemas:
User:
type: object
properties:
id:
type: string
name:
type: string
email:
type: string
format: email 将 OpenAPI 3.0 规范从 YAML 转换为 JSON,用于客户端代码生成器、API 测试工具或编程式 schema 检查
Helm values.yaml
replicaCount: 3
image:
repository: my-app
tag: 1.0.0
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx
hosts:
- host: my-app.example.com
paths:
- path: /
pathType: Prefix
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 128Mi
cpu: 500m
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 80 将 Helm chart 的 values.yaml 转换为 JSON,用于分析、生成报告或输入到期望 JSON 配置的工具
Ansible Playbook
- name: Configure web servers
hosts: webservers
become: true
vars:
http_port: 80
max_clients: 200
tasks:
- name: Ensure nginx is installed
ansible.builtin.package:
name: nginx
state: present
- name: Start nginx service
ansible.builtin.service:
name: nginx
state: started
enabled: true
- name: Copy nginx config
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify:
- Restart nginx
handlers:
- name: Restart nginx
ansible.builtin.service:
name: nginx
state: restarted 将 Ansible playbook YAML 解析为 JSON,用于检查任务结构、审计配置或与报告流水线集成
使用方法
- 1
粘贴 YAML 数据
在上方输入框中输入或粘贴 YAML 数据。也可以点击「加载示例」试用 Kubernetes Deployment、Docker Compose 文件或 Helm values.yaml 等示例。
- 2
查看实时 JSON 输出
JSON 会即时显示在输出面板中。调整选项(缩进 2 或 4 空格)以匹配目标工具的要求。
- 3
复制或下载
点击「复制」将 JSON 复制到剪贴板,或点击「下载」将其保存为 .json 文件,可直接用于 jq、API 调用或任何下游工具。
常见 YAML 转换问题
制表符缩进
YAML 规范禁止使用制表符缩进 — 只允许使用空格。如果 YAML 是在使用制表符的编辑器中编写或从中复制的,解析器将抛出错误。请将所有制表符缩进替换为空格(每级 2 或 4 空格)。
services: web: image: nginx:1.25-alpine
services:
web:
image: nginx:1.25-alpine 缩进不一致
YAML 使用一致的缩进来定义嵌套关系。在同一块中混用不同数量的空格(例如一级 2 空格,另一级 3 空格)会导致解析错误。整个文档中每一级必须保持相同的空格数缩进。
metadata: name: my-app namespace: production
metadata: name: my-app namespace: production
未加引号的特殊字符
冒号(:)、井号(#)、&、*、{、}、[、]、|、>、! 和 @ 在 YAML 中具有特殊含义。在值中未加引号使用它们可能导致解析错误或意外行为。请用单引号或双引号包裹包含这些字符的值。
url: http://example.com:8080/api tag: #latest
url: 'http://example.com:8080/api' tag: '#latest'
锚点循环引用
YAML 技术上允许锚点引用自身(循环引用),虽然实践中罕见。循环锚点会导致解析器进入无限展开循环。eemeli/yaml 库会检测并抛出循环锚点错误,而不会卡死。
# Circular anchor (rare but possible) base: &base parent: *base
# Use explicit fields instead of circular references base: parent: null
多文档混淆
含有多个 --- 分隔符的 YAML 文件包含多个文档。本工具只返回第一个文档的 JSON。如果你期望获得后续文档(第二或第三个 --- 之后)的数据,它不会出现在输出中。如需所有文档,请按 --- 拆分 YAML 并逐段转换。
# Only the first document is converted apiVersion: v1 kind: ConfigMap --- apiVersion: v1 kind: Secret
# Convert each document separately apiVersion: v1 kind: ConfigMap
注释丢失
YAML 支持 # 注释,但 JSON 不支持。所有 YAML 注释在转换时都会永久丢失 — 这是格式间的根本差异,而非工具限制。如需在 JSON 中保留注释信息,请将其编码为专用字段,如 _comment 键或 metadata 对象。
# This comment will be lost replicas: 3 # scale this up for production
replicas: 3 _comment: scale this up for production
常见使用场景
- Kubernetes 清单分析
- 将 Kubernetes YAML 清单转换为 JSON,用于 jq 查询、发送到 Kubernetes REST API、在 Terraform 数据源中处理,或输入到期望 JSON 的 CI/CD 流水线。
- Docker Compose 转 JavaScript 工具
- 将 Docker Compose YAML 解析为 JSON,提取服务定义、镜像名、端口映射和环境变量,用于自动化脚本、依赖图或 Node.js 工具。
- GitHub Actions API 集成
- 将 GitHub Actions 工作流 YAML 转换为 JSON,以编程方式验证结构、提取 job 和 step 定义,或与接受 JSON 工作流规范的 CI/CD API 集成。
- OpenAPI 转客户端代码生成
- 许多代码生成器(openapi-generator、swagger-codegen、oazapfts)支持两种格式的 OpenAPI 规范。当工具明确要求 JSON 输入或需要用 JSON Schema 验证器检查时,将 YAML 规范转换为 JSON。
- Helm Values 分析
- 将 Helm chart 的 values.yaml 转换为 JSON,用于生成报告、跨环境比较 values、输入策略执行工具,或通过期望 JSON 配置的自动化处理。
- 迁移配置到 JSON 工具
- 将应用配置从 YAML(基础设施工具中常见)迁移到 JSON,用于 JavaScript 环境、REST API、AWS AppConfig、Azure App Configuration 或任何以 JSON 存储配置的系统。
技术细节
- 通过 parseAllDocuments(merge:true)遵循 YAML 1.2 规范
- YAML 使用 eemeli/yaml 库(v2.8+,CVE 安全)通过 parseAllDocuments 配合 { version: '1.2', merge: true } 解析。YAML 1.2 schema 确保 yes 和 no 等裸字符串被视为字符串(而非布尔值),符合当前 YAML 规范。merge: true 选项完全展开锚点/别名合并键(<<: *anchor),使 JSON 输出包含完整的去引用数据。多文档 YAML(--- 分隔)返回第一个文档。
- 通过库进行锚点和别名展开
- eemeli/yaml 库安全处理锚点(&name)和别名(*name)展开,包括循环引用检测。所有被引用的数据块(包括合并键展开)都完全内联到 JSON 输出中。这是正确的转换方式,因为 JSON 没有引用或锚点概念。库的安全展开可防止因格式错误的 YAML 导致的无限循环。
- 100% 浏览器端 — 无上传,无服务器
- 所有处理完全在浏览器的 JavaScript 引擎中完成。数据在任何时候都不会通过网络传输。超过 200KB 的输入会自动从实时模式切换到手动模式(需要显式点击「转换」),以保持浏览器响应并防止繁重序列化时主线程阻塞。
最佳实践
- 使用 YAML 1.2 兼容语法以获得干净的转换结果
- 使用 YAML 1.2 惯例编写 YAML — 明确为 yes、no、on、off、y 和 n 字符串值加引号(例如 enabled: 'yes')以避免歧义。本工具使用 YAML 1.2 schema 解析(这些是字符串),但流水线中的旧工具可能使用 YAML 1.1(它们会被视为布尔值)。在源 YAML 中明确加引号是对所有解析器最安全的做法。
- 在 YAML 中为大数字加引号以保留精度
- JavaScript 无法精确表示大于 2^53 - 1(9007199254740991)的整数。Kubernetes 的 resourceVersion 和 uid 等字段在服务器端是 int64,可能超过此限制。在 YAML 源文件中为这些值加引号(resourceVersion: '9007199254740993'),使解析器将其视为字符串,从而在 JSON 输出中以字符串形式精确保留。
- 使用前验证 JSON 输出
- 将 YAML 转换为 JSON 后,在发送到 API、存储或编程处理之前先验证结果。使用 JSON 格式化工具确认结构正确。这对 Kubernetes API 调用、OpenAPI 规范以及任何 JSON Schema 验证的载荷尤为重要,结构错误会在 API 层而非转换步骤产生令人困惑的拒绝信息。
- 转换前分离多文档 YAML
- 如果 YAML 文件包含多个 --- 分隔文档且需要全部转为 JSON,请先按 --- 拆分文件后逐个转换。本工具只取第一个文档。简单方法:在编辑器中按 '\n---\n' 拆分,或使用 awk,然后逐段粘贴。
- 使用 jq 处理下游 JSON
- 从 YAML 获得 JSON 后,jq 是在命令行中查询和转换它的最快方式。结合本工具使用 jq:在线转换 YAML,粘贴 JSON,然后使用 jq '.spec.replicas' 或 jq '.services | keys' 精确提取所需内容。如需批量处理多个文件,直接使用带 -o json 参数的 yq CLI。
常见问题
如何在线将 YAML 转换为 JSON?
本工具如何处理多文档 YAML(--- 分隔符)?
YAML 锚点和别名(&anchor 和 *alias)如何处理?
YAML 注释会保留在 JSON 输出中吗?
如何使用本工具处理 Kubernetes 清单?
如何使用本工具处理 Docker Compose 文件?
YAML 1.1 和 YAML 1.2 有何区别?本工具使用哪个版本?
YAML 为何禁止制表符缩进?
将 YAML 转换为 JSON 时,大数字会丢失精度吗?
如何在命令行中将 YAML 转换为 JSON?
使用本工具时 YAML 数据会上传到服务器吗?
YAML 输入有文件大小限制吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
JSON 格式化与验证工具
编码和格式化
在浏览器中即时格式化、验证和美化 JSON。免费在线工具,支持语法验证、错误检测、压缩和一键复制,100% 隐私保护。
JSON 转 YAML 转换器
编码和格式化
粘贴 JSON 即时获得 YAML,浏览器端实时转换。支持 Kubernetes、Docker Compose 和 Terraform,提供 2/4 空格缩进、Norway 安全自动引号,100% 隐私保护,数据不离开设备。
URL 编码解码在线工具 — 内置 URL 结构解析
编码和格式化
粘贴 URL 即时编码或解码,实时显示结果。内置 URL 解析器将协议、域名、路径、查询参数拆解为可编辑字段。支持 encodeURI 和 encodeURIComponent 双模式切换,检测双重编码问题。纯浏览器端运行,数据不离开设备。
进制转换器 — 二进制、十六进制、十进制、八进制互转
转换工具
在线免费进制转换工具,支持二进制、八进制、十进制、十六进制及 2-36 任意进制互转。无需注册,数据不离开浏览器,即时获取结果。
在线压缩 JPEG、PNG、WebP 图片 — 免费批量处理
转换工具
免费在线压缩 JPEG、PNG、WebP 图片,体积缩小高达 80%。浏览器本地处理、图片不上传服务器。支持批量压缩 20 张、质量调节、前后对比预览。无需注册。