YAML 转 JSON

免费在线 YAML 转 JSON 工具,基于 js-yaml 库解析 YAML 配置并自动转换为标准 JSON 对象。YAML 的层级映射、列表数组自动展开为 JSON 数组,pretty 模式可切换缩进美化;内置 tryFixYAML 自动修复 5 类常见错误(制表符、未闭合引号、缩进、键名格式),纯浏览器本地处理不上传。

相关推荐

关于 YAML 转 JSON:把 YAML 配置自动转换为标准 JSON 对象

YAML 转 JSON 是把 YAML(YAML Ain't Markup Language)格式的配置转换为 JSON 对象的过程。YAML 是一种人类友好的数据序列化格式,广泛用于 Kubernetes(k8s manifest、Helm chart)、Docker Compose、Ansible playbook、GitHub Actions、Prometheus 配置等现代 DevOps 和云原生场景。JSON 是 Web API、JavaScript 生态、配置文件的标准格式。两种格式各有所长:YAML 简洁可读、支持注释和复杂结构、适合人类编辑;JSON 简洁明确、易于机器解析、适合 API 传输。本工具就是为了把 YAML 配置自动转为 JSON 供现代应用使用。

本工具的核心是使用 js-yaml 库解析 YAML 结构,然后通过 JSON.stringify 序列化为 JSON 对象。js-yaml 是成熟的 JavaScript YAML 解析器,支持所有标准 YAML 1.1 语法:标量(string、number、boolean、null、date)、序列(array)、映射(object)、锚点(&)、别名(*)、多行字符串(| 或 >)、注释(#)。基于成熟库的优势是稳定性高、bug 少、支持完整的 YAML 规范。

YAML 到 JSON 的映射规则直观:YAML 映射(key: value)转 JSON 对象({"key": "value"});YAML 列表(- item)转 JSON 数组(["item"]);YAML 嵌套结构转对应的 JSON 嵌套对象和数组;YAML 字符串/数字/布尔/null 类型在 JSON 中保持对应类型。YAML 注释(#)会被自动忽略,因为 JSON 标准不支持注释。

pretty 输出模式(默认 2 空格缩进)生成的 JSON 可读性高,便于人工查看、复制、版本对比;非 pretty 模式输出紧凑单行 JSON,适合网络传输、API 响应、存储到数据库等场景。点击底部工具栏的「格式化输出」复选框可实时切换两种模式。

错误自修复(tryFixYAML)是工具的实用设计。现实中的 YAML 文件经常存在 5 类问题:1) 制表符与空格混用(YAML 要求一致使用空格);2) 行尾多余空格;3) 未闭合的引号(单引号或双引号数量为奇数);4) 缩进不是 2 的倍数(YAML 要求缩进必须一致递增);5) 键名包含连字符或空格需要加引号。工具会自动检测并修复这些问题,并提示用户修复了哪些内容。

YAML 锚点和别名是 YAML 的高级特性。&anchor 定义一个可被引用的标记,*alias 在其他位置引用这个标记。js-yaml 会先在内部解析为 JavaScript 对象(引用被替换为实际内容),所以最终生成的 JSON 不包含锚点信息,相同的对象内容会在 JSON 中多次重复出现。这符合 JSON 的数据模型(JSON 是值类型语言,没有引用概念),但对开发者意味着重复内容会冗余存储。

YAML 1.1 vs 1.2 的差异。YAML 1.1 是广泛部署的版本(js-yaml 默认支持),包括八进制数(0123)、性别单字符(yes/no/true/false)、Norway 缩写(foo: !!str bar)等。YAML 1.2 是最新稳定版,移除了这些歧义特性,与 JSON 规范更一致。本工具默认 YAML 1.1 以保证最大兼容性,如需 YAML 1.2 严格模式可使用 schema: CORE_SCHEMA。

实时转换是工具的实用功能。输入 YAML 后 400ms 防抖自动触发转换,开发者可以快速试错、修改、查看效果。结合快捷键和示例按钮,开发者可以快速完成从 YAML 配置到 JSON 转换的全流程。

纯浏览器本地处理是本工具的核心架构。所有 YAML 解析、JSON 序列化、错误修复都在浏览器 JavaScript 中执行,js-yaml 作为外部依赖(~50KB)通过 npm 引入。原始 YAML 数据(可能包含敏感配置如 k8s secrets、API 密钥、数据库凭证)不上传到服务器,敏感配置可在本地安全处理。

适用场景

  • Spring Boot 应用配置:把 application.yml 及 application-{profile}.yml 转为 JSON,方便 Java 后端用 ObjectMapper 反序列化加载或注入 Apollo/Nacos 配置中心。
  • Mock 服务定义:把 WireMock mappings、Postman Collection v2.1 的 YAML 转为 JSON,配合 Jest/Mocha 单测做接口响应断言和回归测试。
  • 跨工具工作流:先在 yaml-to-json 把 docker-compose.yml 的 services 块转 JSON 数组,再粘贴到 to-csv 工具导出服务清单给运维做资产盘点。
  • 同模块工作流:把嵌套很深的 YAML 转 JSON 后,再粘贴到 format 工具做缩进统一、键名排序、字段合并等二次美化。
  • 第三方 YAML 修复:厂商提供的接口契约 YAML 混用制表符缩进且键名带连字符(如 auth-type)导致解析失败,粘贴进来点「修复结构」一键修复后转 JSON 提交联调工单。
  • ES 索引模板:把 Elasticsearch index template、ingest pipeline YAML 转为 JSON 后导入 Kibana 做索引生命周期管理(ILM),或反向将索引 mapping 转 YAML 提交 DBA 评审。
  • 技术博文素材:技术博主写「YAML vs JSON 选型指南」时,把同一份 K8s Deployment 两种格式并排展示,用本工具做实时转换对比作为配图素材。
  • 前端构建配置:Vite/Webpack 团队把 vite.config.ts 重构为 YAML 后用本工具生成 JSON,让不熟悉 TS 的前端同事用统一 YAML 管理构建配置并被 build 脚本加载。
  • Sentry 监控配置:把 Sentry 项目配置 sentry.yml、release-health 配置转为 JSON 后批量导入多个 Sentry 组织,或与 oncall 系统的 webhook JSON 模板合并。
  • 在线考试题库:把 YAML 格式的题库(单选、多选、判断、案例分析题)转为 JSON 后存入 MongoDB,供在线考试系统按题型聚合查询和随机组卷。
  • 国际化资源协作:产品经理用 YAML 维护多语言文案(zh-CN.yml、en-US.yml),交付前端前先转 JSON 校验键值完整性与嵌套层级,避免 i18n 加载报错。
  • CI 流水线调试:CI 工程师本地调试 GitHub Actions 时,把 .github/workflows/*.yml 转 JSON 后用 jq 快速定位环境变量、secrets 引用,方便排查 secret 解析失败。
  • API Mock 服务器:后端在响应式接口尚未就绪时,把 OpenAPI YAML 转 JSON 导入 Prism 或 MockServer,自动生成 Mock 响应供前端并行开发。
  • Terraform Plan 审计:Terraform 工程师把 plan 输出(plan.yml)转 JSON 后用 jq 过滤敏感字段做最小权限审计,再写回数据库做变更留痕。

使用方法

  1. 在左侧输入框粘贴 YAML 内容,或点击「上传」按钮选择 .yaml/.yml/.txt 文件,或点击「示例」加载内置的用户配置示例。
  2. 工具会自动转换(输入后 400ms 防抖);在右侧查看转换后的 JSON,CodeMirror 语法高亮便于阅读。
  3. 点击底部工具栏的「格式化输出」复选框可在 pretty(2 空格缩进)和紧凑两种输出模式间实时切换,适配不同应用场景。
  4. 如 YAML 有语法错误,点击错误提示旁的「修复结构」按钮,工具会调用 tryFixYAML 自动修复 5 类常见错误,并提示修复内容。
  5. 点击「复制」将 JSON 复制到剪贴板,或点击「下载」保存为 converted.json 文件(MIME: application/json)。
  6. 将 JSON 粘贴到目标代码(kubectl apply、swagger-codegen、自定义 Node.js 配置加载库等)或导入到后端服务进行进一步处理。

功能特点

  • js-yaml 库解析:基于成熟的 js-yaml 库支持所有标准 YAML 1.1 语法(标量、序列、映射、锚点、别名、多行字符串等),无依赖。
  • 智能错误修复:内置 tryFixYAML 自动修复 5 类常见 YAML 错误(制表符、未闭合引号、缩进不规范、键名特殊字符、行尾空格)。
  • pretty 输出模式:默认 2 空格缩进美化输出,便于阅读和人工编辑;非 pretty 模式输出紧凑单行 JSON,适合网络传输。
  • 完整类型支持:支持所有 YAML 标量类型(string、number、boolean、null、date)、序列(array)、映射(object)的双向转换。
  • 嵌套结构递归:任意深度的 YAML 嵌套映射和列表会递归转换为对应的 JSON 嵌套对象和数组。
  • 锚点别名解析:支持 YAML 锚点(&anchor)和别名(*alias)语法,js-yaml 自动解析引用关系,JSON 中显示展开后的内容。
  • YAML 注释忽略:YAML 注释(#)会被自动忽略,转换后的 JSON 是纯数据,不包含注释。
  • 实时自动转换:输入 YAML 后 400ms 防抖自动转换,配合键盘快捷键提升操作效率。
  • JSON 高亮输出:右侧 CodeMirror JSON 语法高亮,便于阅读复杂 JSON 结构。
  • 纯浏览器本地处理:所有 YAML 解析、JSON 序列化、错误修复都在浏览器 JavaScript 中完成,原始配置不上传。
  • 历史记录恢复:自动保存最近 200 条历史记录,页面加载时自动恢复上次输入内容。
  • 完整快捷键体系:转换、上传、复制、下载、清空等常用操作,遵循主流 JSON/YAML 编辑工具约定。

常见问题

怎么把 YAML 转成 JSON 格式?

把 YAML 内容粘贴到左侧输入框,工具会使用 js-yaml 库解析 YAML 结构(键值对、列表、嵌套映射、注释等),并自动转换为标准 JSON 对象。映射:YAML 映射转 JSON 对象({key: value})、YAML 列表转 JSON 数组([item1, item2])、YAML 字符串/数字/布尔直接对应 JSON 类型。400ms 后自动转换,无需手动点击。

YAML 中的注释(#)会保留在 JSON 中吗?

不会。YAML 注释(以 # 开头的行)只是给开发者阅读用的,js-yaml 解析时会自动忽略。转换后的 JSON 是纯数据,不包含任何注释。如需保留文档结构,建议保留原始 YAML 文件作为注释来源,或在 JSON 字段名中使用 'comment' 字段显式存储注释。

支持哪些 YAML 数据类型?

支持所有标准 YAML 1.2 类型:标量(字符串、数字、布尔、null)、序列(列表/数组)、映射(对象/字典)、嵌套结构(多层缩进)、多行字符串(| 或 >)、锚点与别名(& 和 *)、文档分隔符(---)。特殊格式如日期、ISO 8601 时间戳会自动被解析为 JavaScript Date 对象(在 JSON 中转为字符串)。

什么是 pretty 输出模式?

工具支持两种输出模式:pretty(默认)输出带 2 空格缩进和换行的格式化 JSON,可读性高便于阅读和人工编辑;非 pretty 输出紧凑的单行 JSON,适合网络传输、API 响应、存储到数据库等场景。点击底部工具栏的「格式化输出」复选框可实时切换两种模式。

遇到格式不规范(如缩进错误)的 YAML 能转换吗?

可以。工具内置 tryFixYAML 修复函数,会自动修复 5 类常见错误:1) 制表符自动转为 2 空格缩进;2) 移除行尾多余空格;3) 修复未闭合的单引号/双引号;4) 自动修正非 2 倍数的缩进;6) 修复包含连字符或空格的键名(自动加引号)。这一设计显著提升了对实际项目中不规范 YAML 的兼容性。

支持哪些输入文件类型?

支持 .yaml、.yml、.txt 文件(UTF-8 编码)。点击「上传」按钮选择本地文件,工具通过浏览器原生 FileReader API 读取,不会上传到服务器。上传成功后内容自动填入输入框并触发自动转换。文件类型检查在客户端执行,不符合的文件类型会显示错误提示。

下载的 JSON 文件用什么打开?

下载文件 converted.json 是 UTF-8 编码的标准 JSON 文件(MIME: application/json),可用任何文本编辑器(VS Code、Sublime、Notepad++)或专业 JSON 工具(jq、JSDoc)打开。JavaScript、Python、Node.js、Java、Go 等几乎所有编程语言都内置 JSON 解析器,可直接导入使用。

支持 YAML 多行字符串吗?

支持。YAML 提供了两种多行字符串语法:字面量块(|)保留换行,折叠块(>)将换行折叠为单行空格。js-yaml 都能正确解析。多行字符串会按 YAML 规范在 JSON 中表示为带换行符或单行空格的字符串,可直接在应用中使用。

YAML 锚点和别名怎么转换?

YAML 支持锚点(&anchor)和别名(*alias)语法用于引用重复内容。js-yaml 会先解析为 JavaScript 对象,锚点和别名在转换过程中会被解析器内部解析(每个别名引用会被替换为锚点的实际内容),所以最终生成的 JSON 中不包含锚点信息,相同的对象内容会在 JSON 中重复出现(不会共享引用)。这符合 JSON 的数据模型(无引用概念)。

YAML 中的日期和时间如何处理?

js-yaml 遵循 YAML 1.1/1.2 规范,ISO 8601 格式的日期/时间戳(如 2026-01-15T10:30:00Z)会被自动解析为 JavaScript Date 对象。转为 JSON 时,Date 对象会通过 JSON.stringify 序列化为 ISO 8601 字符串。但请注意:解析后类型会丢失(JSON 没有原生的 Date 类型),需要时可在应用层进行类型标注。

支持哪些 YAML 版本?

工具通过 js-yaml 库支持 YAML 1.1(默认)和 YAML 1.2(通过 schema 选项配置)。YAML 1.2 是最新稳定版,移除了 YAML 1.1 中的一些歧义语法(如 8 进制、性别单字符值),推荐使用。本工具默认使用 YAML 1.1 以保证最大兼容性。如需启用 YAML 1.2,可使用 schema: CORE_SCHEMA 或 JSON_SCHEMA。

支持哪些输入文件大小?

理论上无硬性上限,受浏览器内存限制。1-2 MB 以内的 YAML 可流畅处理;更大文件可能因 js-yaml 解析 DOM 树占用较多内存而变慢。如处理大型 Kubernetes manifest 或 Docker Compose 文件出现卡顿,建议在本地 YAML 编辑器中精简或拆分。所有解析在浏览器本地完成,敏感配置(如 k8s secrets)不会上传到服务器。

故障排查

YAML 解析报 'unexpected token' 错误?

原因通常是缩进错误(混用制表符和空格、不一致的层级)、未闭合的引号、键值对缺少冒号、或列表符号 - 位置错误。点击错误提示旁的「修复结构」按钮,工具会调用 tryFixYAML 自动修复 5 类常见错误,并提示修复了哪些行。如果仍无法解析,请检查 YAML 是否使用了非标准语法(如制表符缩进)。

YAML 锚点引用 (★alias) 转换后丢失了?

这是正常行为。js-yaml 在内部解析时自动展开引用,最终 JSON 中不保留锚点信息,相同的对象内容会在 JSON 中多次重复出现(不共享引用)。如需保留引用关系,建议在解析后的 JSON 中使用 $ref 字段(JSON Reference 规范)或在应用层维护引用映射。

布尔值变成了字符串?

YAML 中 yes/no/on/off/true/false 在 YAML 1.1 中都被解析为布尔值(YAML 1.2 移除了 yes/no)。如果你的 YAML 1.2 文件中使用了 yes/no 但被解析为字符串,请将它们改为 true/false,或在解析前明确加上引号 'yes' 强制字符串类型。

为什么日期变成了 ISO 字符串?

YAML 中的 ISO 8601 日期(如 2026-01-15、2026-01-15T10:30:00Z)会被 js-yaml 自动解析为 JavaScript Date 对象。JSON.stringify 序列化 Date 对象时使用 toISOString() 输出 ISO 字符串。如果需要保留为自定义格式(如 YYYY-MM-DD HH:mm:ss),可以在解析后用 date-fns、moment.js 等库重新格式化。

如何保留 YAML 注释?

工具当前不保留注释,因为 JSON 标准不支持注释。建议方案:1) 在原始 YAML 文件中维护注释(注释用于开发者沟通);2) 转换后在 JSON 中用 'comment' 字段显式存储文档说明;3) 使用专门的文档工具(如 Swagger 的 openapi 规范)保留 API 文档。

多文档 YAML 文件(用 --- 分隔)如何处理?

默认只解析第一个 YAML 文档。js-yaml 支持 loadAll() 方法解析多文档,但本工具当前仅支持单文档。如需处理多文档 YAML,可先用文本编辑器分割为多个文件,或使用 js-yaml 的 loadAll() API 自定义实现。

下载的 .json 文件用什么打开?

下载文件 converted.json 是 UTF-8 编码的标准 JSON 文件(MIME: application/json),可用任何文本编辑器(VS Code、Sublime、Notepad++)或专业 JSON 工具(jq、JSDoc)打开。可直接拖入浏览器查看格式化结构。JavaScript、Python、Node.js、Java、Go 等几乎所有编程语言都内置 JSON 解析器。

术语表

YAML (YAML Ain't Markup Language)
人类友好的数据序列化格式,2001 年由 Clark Evans 等人设计。使用缩进表示层级、支持注释、列表、映射、多行字符串、锚点与别名等特性。是 Kubernetes、Docker Compose、Ansible、GitHub Actions 等现代 DevOps 工具的事实配置标准。
JSON (JavaScript Object Notation)
轻量级数据交换格式,基于 JavaScript 对象语法但独立于编程语言。支持对象 ({}), 数组 ([]), 字符串, 数字, 布尔, null 六种基本类型。是现代 Web API、NoSQL 数据库、JavaScript 生态的事实标准。
js-yaml
成熟的 JavaScript YAML 解析器和序列化器(~50KB),支持 YAML 1.1 完整规范和部分 1.2。本工具基于此库实现 YAML 解析为 JavaScript 对象,再通过 JSON.stringify 序列化为 JSON。
缩进(indentation)
YAML 严格依赖缩进表示层级关系,必须使用空格(不能使用制表符)且缩进必须一致(如 2 空格)。这是 YAML 最常见错误源之一。本工具自动检测和修复缩进问题。
锚点与别名(anchor & alias)
YAML 高级特性。&anchor 定义可被引用的标记,*alias 在其他位置引用该标记。js-yaml 在内部解析时自动展开引用,最终 JSON 中不保留这些标记,只包含展开后的数据。
多行字符串(multiline)
YAML 提供两种多行字符串语法。字面量块(|)保留换行符;折叠块(>)将多个换行折叠为单个空格。js-yaml 正确解析这两种语法,转换到 JSON 时按规范保留或折叠换行。
文档分隔符(document separator ---)
YAML 中三个连续连字符(---)表示文档分隔符,常用于在一个文件中包含多个 YAML 文档。js-yaml 默认只解析第一个文档,多文档解析需特殊处理。
YAML 1.1 vs 1.2
YAML 1.1(2005)广泛部署,支持八进制、性别单字符、Norway 缩写等。YAML 1.2(2009)移除了有歧义特性,与 JSON 更兼容。本工具默认 YAML 1.1 以保证最大兼容性。
锚点(&)
YAML 中 &name 定义一个可被后续 *name 引用的标记,常用于避免在多文档中重复相同配置块。
别名(*)
YAML 中 *name 引用之前用 &name 定义的标记,js-yaml 在解析时会将引用替换为实际内容,最终 JSON 中不含别名信息。
JSON.stringify
JavaScript 内置方法,将对象序列化为 JSON 字符串。本工具使用第 2 个参数(replacer)和第 3 个参数(space)控制缩进:space=2 生成 pretty 输出,space=undefined 输出紧凑单行。
tryFixYAML
本工具内置的 YAML 修复函数,会自动检测和修复 5 类常见错误:制表符转空格、移除行尾空格、闭合未闭合引号、修正非 2 倍数缩进、为包含特殊字符的键名加引号。处理实际项目中不规范的 YAML。
pretty 输出
本工具的可切换输出模式。启用时输出带 2 空格缩进和换行的可读 JSON(便于人工查看);禁用时输出紧凑单行 JSON(适合 API 传输、存储)。

YAML 到 JSON 类型的映射规则

本工具基于 js-yaml 的 YAML 到 JSON 转换映射规则:

YAML 类型YAML 示例JSON 输出映射规则
stringname: Alice"name": "Alice"YAML 字符串值转为 JSON 字符串(带双引号)
numberage: 30"age": 30YAML 数字保持为 JSON 数字(不带引号)
booleanisActive: true"isActive": trueYAML 布尔(true/false)保持为 JSON 布尔
nullvalue: null / value:"value": nullYAML null 或空值转为 JSON null
sequence- a\n- b\n- c["a", "b", "c"]YAML 列表(-)转为 JSON 数组
mappingname: Alice\nage: 30{"name": "Alice", "age": 30}YAML 映射(key: value)转为 JSON 对象
nested mappinguser:\n name: Alice\n age: 30{"user": {"name": "Alice", "age": 30}}YAML 嵌套缩进转为 JSON 嵌套对象
list of objects- name: a\n- name: b[{"name": "a"}, {"name": "b"}]YAML 列表项为对象时转为 JSON 对象数组
datecreatedAt: 2026-01-15"createdAt": "2026-01-15T00:00:00.000Z"ISO 8601 日期转为 Date 对象再序列化为 ISO 字符串

YAML 与 JSON 格式对比

两种格式在不同维度上的对比,帮助理解何时选择 YAML 或 JSON:

维度YAMLJSON说明
语法缩进 + : - 简洁{ } : [ ] 严格YAML 简洁但易错(缩进敏感),JSON 严格但冗长
注释# 注释不支持YAML 支持注释,JSON 标准不支持
数据类型标量、序列、映射字符串、数字、布尔、null、对象、数组YAML 更丰富(含 date、binary 等),JSON 较简单
数组- item1\n- item2["item1", "item2"]YAML 用破折号,JSON 用方括号
可读性高(无引号无括号)中等(括号噪音)YAML 对人类更友好
多行字符串| 或 > 块语法需 \n 转义YAML 原生支持,JSON 需转义
引用&anchor *alias不支持(需重复)YAML 支持锚点别名,JSON 必须重复
使用场景配置文件、CI/CD、k8sAPI 响应、存储、WebYAML 适合配置,JSON 适合 API

常见 YAML 错误和修复

本工具 tryFixYAML 自动检测和修复的 5 类常见 YAML 错误:

错误类型错误示例自动修复说明
制表符缩进key:\n\tvaluekey:\n value
行尾空格key: value key: value
未闭合引号key: 'valuekey: 'value'
缩进不规范 key:\n valuekey:\n value
键名特殊字符my-key: value"my-key": value

Privacy & Security

本 YAML 转 JSON 工具所有操作完全在你的浏览器本地完成:YAML 解析(基于成熟的 js-yaml 库)、JSON 序列化、错误修复(tryFixYAML)全部通过浏览器 JavaScript 在客户端执行,js-yaml 是唯一外部依赖(约 50KB 的 npm 包)。原始 YAML 数据(可能包含敏感配置如 k8s secrets、API 密钥、数据库凭证)不上传到任何服务器。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含敏感配置(k8s secrets、API 密钥、数据库凭证、企业 DevOps 流水线)的 YAML 文件。

Authoritative References