YAML 转换器
把 YAML 转成 JSON、TOML、XML、JavaScript 对象字面量或 PHP 数组,多文档(用 --- 分隔)会自动合并为数组,anchor 与 alias、merge key(<<: *base)会展开成实际结构。覆盖 Kubernetes manifest、Helm Chart、Docker Compose、GitHub Actions、GitLab CI、OpenAPI、AsyncAPI、Ansible playbook、CloudFormation 等常见 YAML 场景,识别 Norway 问题、版本号被截、大整数精度丢失、tab 缩进、隐式 null 等真实容易踩到的类型陷阱,错误信息附带行号、列号和上下文片段。所有解析、转换与复制都在当前浏览器标签页内完成,YAML 内容不会上传到任何服务器,也不会经过第三方接口。
相关文章
YAML 多行字符串:什么时候用 |,什么时候用 >
YAML 里写多行的值,有两个块符号:一个竖线,一个大于号;此外单引号、双引号、甚至不加引号也能跨行。每种保留还是折叠换行的规则都不一样,选错就把一段脚本压成一行。这篇把它讲全,连带那些会咬人的角落。
阅读文章YAML 为什么老出问题?响亮的报错和静默的坑
同一个早上来了两个工单,都说「我的 YAML 挂了」。一个是第 12 行的红色解析报错——一分钟就修好。另一个是服务正常启动、却跑出了错的行为,因为一个没加引号的值悄悄变成了别的东西。这是两个相反的问题,而危险的那个恰恰是安静的那个。
阅读文章JSON、YAML、TOML 配置格式到底怎么选?
一个 PR 只加了一个小小的配置文件,review 却歪成了四十条评论——用 YAML?换 TOML?干脆 JSON 算了?——最后啥也没改。这场争论卡在了一个错的问题上:哪个格式最好?根本没有最好。每种格式的最大长处,本身就带着它最大的短板。看清这一点,选择就收敛成两个简单得多的问题。
阅读文章
功能简介
这是一款专门承接 YAML 起点的格式转换工具。多文档合流、anchor 展开、类型陷阱检测、引擎兼容性提示都在解析阶段一次性完成,输出可以直接交给下游 CI、配置模板、JSON Schema 校验或代码生成器,不必再做一轮人工兜底。
- 01
五种目标格式开箱即用
YAML 转 JSON、TOML、XML、JavaScript 对象字面量、PHP 数组。按键名排序和大整数处理对五种目标格式都生效;JSON 另外可调缩进;TOML 强制顶层对象、避免输出半截结果;XML 可自定义根节点名、列表项名、声明、pretty print,根是列表时也能转;JS 对象保留引号键名与转义;PHP 数组生成完整的 <?php return [...]; 文件。
- 02
多文档 YAML 自动合流
一份文件用 --- 分隔多个文档时(例如 Kubernetes manifest、Helm template 渲染输出、kustomize build 结果、Ansible playbook),工具会按出现顺序整理成一个 JSON 数组,也可在选项里切换成只输出第一个文档,方便分别处理 Deployment、Service、Ingress 等资源。
- 03
Anchor、alias 与 merge key 展开
&base、*base、<<: *base 这类引用在解析后会展开成实际结构,下游 JSON、TOML、XML 不会再看到悬空 alias 或丢失的 merge 字段。检查面板会列出所有 anchor 名字,方便你回头确认是哪一条引用被展开进来的;遇到会无限膨胀的 anchor 链,工具会中止展开而不是把页面卡死。
- 04
类型陷阱与版本兼容性提示
识别 Norway 问题(country: no 被当成布尔)、版本号被截(1.10 变 1.1)、大整数超 Number.MAX_SAFE_INTEGER 后精度丢失、tab 缩进、隐式 null、八进制前缀歧义等真实容易踩到的坑,并指出是 YAML 1.1 还是 1.2 行为差异。
- 05
行号、列号定位的错误信息
解析失败时,错误会附带具体行号、列号、附近上下文片段以及 yaml.js 给出的语法提示,方便直接回到原文件定位问题,不用靠肉眼数缩进。
- 06
完全在浏览器内运行
解析、转换、检查、复制全部发生在当前页面内。YAML 不会通过任何请求被发送到服务器、CDN 或第三方分析平台,可以安心粘贴生产环境的 manifest、密钥样例数据、
Cargo.toml迁移草稿等敏感内容。
如何使用
工作流被压缩成贴 YAML、选格式、读检查、复制结果四步,下面是具体顺序与细节。
- 01
把 YAML 文本贴到左侧输入区。工具会即时解析,并在右下角检查面板里显示文档数量、anchor 列表、缩进警告等结构信息。
- 02
在底部切换目标格式:JSON、TOML、XML、JavaScript 对象或 PHP 数组。选项条里可以调整按键名排序、大整数转文本、JSON 缩进宽度、XML 根节点名与列表项名,输出会实时跟着变。
- 03
查看检查面板中的提示,重点关注 Norway 问题、版本号被截、大整数与 tab 缩进。这些提示不会阻塞转换,但会标记需要回到 YAML 加引号或调整缩进的位置。
- 04
右上角支持窗口与全屏两种模式,长 manifest 或 OpenAPI 描述可以切到全屏,输入与输出两栏同时获得更大可视空间。
- 05
确认无误后点击复制结果,把输出粘到 IDE、代码片段、CI 任务定义或 Postman、Insomnia 等接口工具继续使用。
功能说明
日常处理 YAML 时反复出现的细节,都做成了默认行为,不需要再到外部工具凑一遍流程。
- 解析使用 YAML 1.2 规范,常见类型陷阱默认按规范处理,同时额外标记 YAML 1.1 行为差异,避免和 Python、Ruby、PHP 等老版本运行时不一致。
- 默认保留 YAML 中键的出现顺序,也可以打开按字母排序,这个开关对五种目标格式都生效,方便 git diff、code review、JSON Schema 校验得到稳定结果。
- 转 TOML 时要求顶层是表(table),如果根是数组、字符串、数字会直接给出错误,而不是输出语法上不成立的半截 TOML。
- 转 XML 支持自定义根节点名、列表项名、声明、pretty print,可以直接对齐 SOAP、RSS、SAML、Atom 等既有 schema。
- 转 JavaScript 对象与 PHP 数组保留嵌套、转义、空值与布尔的字面量,能直接贴回测试数据、Storybook story、Laravel 配置、WordPress 示例。
- 多文档 YAML 既能整体输出为数组,也能切换成只输出第一个文档,适合按资源单独处理 Kubernetes Deployment、Service、Ingress 等对象。
- 解析后输出 anchor 列表、文档数量、嵌套深度,帮助你迅速理解一份陌生 YAML 的拓扑结构。
- 所有运算都在浏览器线程完成,没有 SaaS 后端,离线网络下也能继续使用。
适合哪些场景
只要工作的起点是一段 YAML,下面这些任务都能省一次手抄或一次截图复述。
-
Kubernetes manifest 与 kustomize 输出审阅
把多文档的 Deployment、Service、Ingress、ConfigMap、Secret 粘进来,输出整段 JSON,一次性看完每一个资源的字段,配合 json-diff 比对上线前后差异,比 kubectl diff 更直观。
-
Helm Chart 调试与 values 整理
helm template 渲染出的 YAML 会包含多个文档与 anchor 引用,转成 JSON 后能完整看清每个资源的最终形态,避免
values.yaml的层层覆盖留下隐藏差异。 -
GitHub Actions、GitLab CI、CircleCI 排查
把 workflow 文件转成 JSON,再用 JSON 工具做结构化对比,搞清 matrix、env、conditional、reusable workflow 的最终展开形态,定位为什么某个 job 没有触发。
-
OpenAPI、AsyncAPI 与 JSON Schema 切换
团队习惯写 YAML 描述接口或事件,但 Stoplight、Swagger Codegen、Prism mock、AJV 校验等工具部分只接受 JSON。一键转换避免双源维护,减少手工同步出错的可能。
-
前后端测试数据与 mock 数据同步
后端用 YAML 编写测试数据(Rails、Symfony、Laravel 都常见),前端 Jest、Vitest、Storybook 单元测试需要 JSON 或 JS 对象时,复制粘贴即可,无需自己写转换脚本。
-
TOML 项目迁移与 Cargo、pyproject 编辑
Cargo.toml、pyproject.toml、Hugoconfig.toml等场景把 YAML 配置改写为 TOML,先看 YAML → TOML 的结构化输出再人工微调,避免逐行誊写带来的拼写错误。 -
Ansible playbook 与 CloudFormation 阅读
Ansible 的 vars 文件、CloudFormation 的 SAM 模板里 anchor 与 intrinsic function 嵌套深,转成 JSON 后嵌套层级会一目了然,便于评审与培训新同事。
-
安全审查与配置基线对比
检查 anchor 链路、嵌套深度、隐式类型与未引用敏感词,确认 YAML 中的隐式行为不会让生产环境布尔值偏差,配合 JSON 差异工具核对配置基线。
延伸阅读
如果手上反过来拿到的是 JSON——例如压缩后的 API 响应、Helm values 的 JSON dump、Terraform plan 的 JSON 视图、kubectl get -o json 的输出——需要反向把它写回 YAML、TOML、XML、CSV、JavaScript 对象或 PHP 数组的形式,可以打开 JSON 转换器。每种目标格式都带有专属选项,比如 YAML 的缩进与键名排序、XML 的根节点名与属性模式、CSV 的分隔符与表头、TOML 的键名排序、PHP 的根级 return 结构,能直接生成贴合下游工具习惯的文本。如果想在转换前先把杂乱的 JSON 整理一遍、折叠深层节点、定位语法错误、查看键值统计,再决定到底转成哪一种格式,可以把内容先交给 JSON 格式化,它支持按层级折叠、错误行高亮、键名搜索、深度统计,以及在浏览器内完成的格式化与压缩,同样不上传任何数据。当你想知道两份 YAML 转出来的 JSON 究竟改动了哪些字段——例如对比上线前后的 Kubernetes manifest、不同 environment 的 GitHub Actions workflow、Helm values 的两个 release——可以把两段结果分别粘到 JSON 差异对比,它会按 JSON Path 列出每一处增、删、改,配合 git 风格的并排视图,比起肉眼比对更容易发现意外覆盖、隐式类型转换或缩进错误带来的副作用。如果手上那份文件是 TOML —— Cargo 清单、pyproject、Netlify 配置 —— 同样的一组转换要从那一端开始,用 TOML 转换器。
YAML 比 JSON 能表达更多,多出来的部分去哪了
YAML 的键可以是任意标量,值可以带标签,节点之间可以互相引用——JSON 这三样都没有。转换时这些能力必须落地成 JSON 认识的东西:有的翻译得很准确,有的会无声消失。下面四条都可以用上面的工具复现。
-
!! 标准标签有效,自定义标签会被丢掉
!!str 42正确输出 "42",!!int "7"输出 7。但应用自定义标签不会:!Ref MyBucket输出成 "MyBucket",!GetAtt [MyBucket, Arn]输出成["MyBucket", "Arn"]——标签本身消失了,而且没有任何提示。CloudFormation、SAM、CDK 的模板转出来会是语法合法、语义已经坏掉的 JSON,因为真正的写法应该是{"Ref": "MyBucket"}。顺带一提,!!binary "aGk="会被解码成字节,落在 JSON 里是{"0": 104, "1": 105}。 -
YAML 的键可以不是字符串,JSON 的必须是
{true: A, "true": B, 1: C, "1": D, null: E}转出来是{"1": "D", "true": "B", "": "E"}。布尔 true 和字符串 "true" 在 JSON 里是同一个键,数字 1 和 "1" 也是,后出现的直接覆盖先出现的;null 作为键则变成空字符串键。5 个键进去,3 个出来,被覆盖的两个值没有留下任何痕迹。 -
重复键会直接报错,这一点值得庆幸
{a: 1, a: 2}不会被转换,而是给出Map keys must be unique (line 1, column 8)并指出原文位置。不少 YAML 运行时会默默取最后一个,于是配置悄悄漂移到一个你从没审过的值上。宁可在这一步被拦下来,也好过在生产环境里才发现。 -
alias 是引用,展开是复制
用
&a定义一个 10 元素数组,再用 10 个*a引用它,输出就是 10 份完整副本,而不是 10 个指针。YAML 源文件几百字节,转出的 JSON 可以是几十 MB——YAML 炸弹就是这么来的。转换大型 Helm values 或 Kubernetes 清单之前,先看一眼 anchor 被引用了多少次。
使用建议
YAML 的可读性是把双刃剑:缩进与裸字面量降低了门槛,也容易在边界处出现意外。下面是几条几乎适用所有 YAML 项目的小习惯。
- 对所有像 yes、no、on、off、true、false、null 这样的敏感字面量都加上引号,避免在 YAML 1.1 兼容引擎里被解析成布尔或空值。
- 版本号、序列号、电话号码、订单号、Git commit hash、ISBN 等字符串始终加引号,防止被当作浮点、八进制或大整数处理。
- 缩进只用空格,统一为 2 个或 4 个,不要在同一份文件里混用 tab 和 space,更不要让编辑器把 tab 隐式展开成宽度不一致的空格。
- 复用结构时优先使用 anchor 与 alias,比手工复制粘贴更安全,merge key(<<: *base)可以把公共字段抽出来集中维护。
- YAML 转 JSON 后,建议把结果交给 json-diff 与上一版本比对,捕捉静默改动的字段;持续集成里也可以加这一步作为防退化检查。
- 多文档 YAML 转换后,确认数组顺序与原文件一致,特别是 Kubernetes 这种 namespace、CRD、Operator 顺序敏感的资源链。
- 生产 manifest 提交前用本工具跑一次结构展开,确认 anchor、merge、include 不会产生意料外的字段覆盖。
- YAML 的 binary、timestamp、custom tag 在转 JSON、TOML 时可能丢失语义,需要时改用字符串字面量并在文档里注明类型。
边界与注意事项
明确这个工具不做的事,可以避免把它当成完整的 YAML IDE、schema 校验器或 GitOps 流水线。
- 不会校验业务 schema,例如 Kubernetes API 对象、OpenAPI 字段约束、JSON Schema、Cargo manifest 的具体字段是否合法;语法通过不代表语义正确。
- 不保留 YAML 中的注释,转出的 JSON、TOML、XML 等格式不会包含 # 后的内容,需要保留时请把关键注释提升为字段或文档。
- 不会自动改写 YAML 源文件,所有修改都需要回到原始文件手工完成,避免在线工具偷偷改动版本受控的配置。
- 超大文件(数十万行或数 MB)可能让浏览器变慢,但仍在本地处理,不会被截断或上传;遇到这种情况建议先用代表性片段验证选项。
- 不会执行 YAML 中的 tag 类型,
!!python/object、!!js/function 以及 CloudFormation 的!Ref这类写法都不会被解析成对应对象,因此不存在反序列化漏洞。它们会以未解析状态留下,检查面板会把这些 tag 列出来,提醒你值还在但 tag 的含义已经丢了。 - 不提供版本控制、协作、评论、Git 集成等功能,定位是单次转换与检查,复杂协作请配合 Git 仓库与 PR 流程。
- 目标格式本身各有边界:TOML 顶层必须是对象、也完全没有 null,XML 与 PHP 数组只带文本不带类型信息,五种格式都无法表达 YAML 的引用。遇到这些冲突时,检查面板会写清楚是哪一处,而不是强行序列化出一份看起来正常的结果。
常见问题
常见疑问集中在多文档处理、anchor 与 merge key、类型陷阱以及数据是否会离开浏览器。
一份 YAML 里有多个文档怎么办?
工具会自动识别用 --- 分隔的多文档,按出现顺序合并成一个 JSON 数组,方便 Kubernetes manifest、Helm 渲染结果、Ansible playbook 等多资源文件一次性查看。也可以在选项里关闭这个行为,只输出第一个文档,专注处理单个资源。
anchor、alias 和 merge key 会被保留吗?
会被展开成实际结构。JSON、TOML、XML、JavaScript 对象字面量、PHP 数组这些下游格式都没有引用的概念,展开是唯一忠实的做法,也能避免下游工具看到悬空 alias 或缺失字段。如果你想查 anchor 的来源与作用范围,检查面板会列出源文件里出现过的所有 anchor 名字,追踪某个字段是从哪一条 merge 进来的通常够用了。
为什么我的 country: no 在转 JSON 后变成了 false?
这是著名的 Norway 问题。YAML 1.1 把 yes、no、on、off 当作布尔,挪威的 ISO 国家代码 NO 一旦没加引号就会被强转为 false。工具默认走 YAML 1.2 规范,但仍会在检查面板里标记这类风险,避免和 PyYAML、Symfony YAML 等 1.1 兼容运行时产生不一致。最稳的写法是统一给值加引号。
YAML 里看起来像版本号的 1.10 为什么变成 1.1 了?
没引号的 1.10 会被 YAML 解析成浮点 1.1,因为浮点尾部零会被丢弃。建议把版本号、电话号码、序列号、ISBN、Git commit hash 等明显的字符串都统一加引号,工具检测到时也会在提示里标红。
为什么我转 TOML 时提示根必须是对象?
TOML 规范要求顶层必须是表(table),不能是数组、字符串、数字或 null。如果你的 YAML 顶层是列表,例如 [a, b, c],可以先包一层 key,比如 items: [a, b, c],再转 TOML。这样既符合 TOML 语义,也方便给数组一个语义化的命名。
大整数为什么会精度丢失?
JavaScript 的 Number 类型上限是 2^53 - 1,超过这个范围的整数(例如雪花 ID、UUID 的整数形式、时间戳乘以毫秒后再放大)会在转 JSON 时变成不精确的近似值。工具会在检查面板里逐个列出受影响的值,打开大整数转文本后,这些值会以字符串形式完整输出,每一位都不会丢。最彻底的做法仍然是在 YAML 源文件里就给它们加引号。
我贴进去的数据会被上传吗?
不会。解析、转换、检查、复制都在浏览器里完成,没有任何接口把 YAML 发到服务器、CDN 或第三方分析平台。生产环境的 manifest、密钥样例数据、Cargo.toml 迁移草稿都可以放心粘贴,关闭页面后数据也不会保留。
可以离线使用吗?
首次访问加载完成后,浏览器已经具备解析与转换所需的全部资源,断网情况下仍然可以继续使用。这也意味着哪怕在限制访问外网的内网环境里,也能用同一套工具流程。
更多相关工具
继续处理数据格式工作:从 JSON 反向转回 YAML、整理 JSON 结构、定位嵌套语法错误,或者并排对比两版转换结果,下面这些工具可以串成完整的工作流。