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 内容不会上传到任何服务器,也不会经过第三方接口。
- 一次输入支持 5 种目标格式:JSON、TOML、XML、JavaScript 对象、PHP 数组,每种格式都有独立选项
- 多文档 YAML(--- 分隔)自动整理为 JSON 数组,按出现顺序保留索引,方便 Kubernetes manifest、Helm 渲染结果一次性查看
- anchor、alias、merge key 默认展开成完整结构,避免下游 JSON、TOML、XML 工具看到悬空引用或被迫做二次解析
- 智能检测 YAML 1.1 兼容陷阱:Norway 问题、yes/no/on/off 被解析为布尔、版本号当浮点处理、大整数超 Number.MAX_SAFE_INTEGER、tab 当缩进
- 完整本地化处理,不上传内容、不做埋点统计,敏感配置、生产 manifest、密钥 fixture 都可以安全粘贴
功能简介
这是一款专门承接 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 字段。需要保留原始引用结构做调试时也可以关闭展开。
- 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、密钥 fixture、Cargo.toml 迁移草稿等敏感内容。
如何使用
工作流被压缩成贴 YAML、选格式、读检查、复制结果四步,下面是具体顺序与细节。
- 01
把 YAML 文本贴到左侧输入区。工具会即时解析,并在右下角检查面板里显示文档数量、anchor 列表、缩进警告等结构信息。
- 02
在底部切换目标格式:JSON、TOML、XML、JavaScript 对象或 PHP 数组。每种格式都有独立选项面板,按需调整缩进宽度、是否按键名排序、是否展开 anchor、XML 根节点名等。
- 03
查看检查面板中的提示,重点关注 Norway 问题、版本号被截、大整数与 tab 缩进。这些提示不会阻塞转换,但会标记需要回到 YAML 加引号或调整缩进的位置。
- 04
右上角支持窗口与全屏两种模式,长 manifest 或 OpenAPI 描述可以切到全屏,输入与输出两栏同时获得更大可视空间。
- 05
确认无误后点击复制结果,把输出粘到 IDE、代码片段、CI 任务定义或 Postman、Insomnia 等接口工具继续使用。
功能说明
日常处理 YAML 时反复出现的细节,都做成了默认行为,不需要再到外部工具凑一遍流程。
- 解析使用 YAML 1.2 规范,常见类型陷阱默认按规范处理,同时额外标记 YAML 1.1 行为差异,避免和 Python、Ruby、PHP 等老版本运行时不一致。
- 转 JSON 时保留 YAML 中键的出现顺序,可选按字母排序,方便 git diff、code review、JSON Schema 校验得到稳定结果。
- 转 TOML 时要求顶层是表(table),如果根是数组、字符串、数字会直接给出错误,而不是输出语法上不成立的半截 TOML。
- 转 XML 支持自定义根节点名、列表项名、声明、pretty print,可以直接对齐 SOAP、RSS、SAML、Atom 等既有 schema。
- 转 JavaScript 对象与 PHP 数组保留嵌套、转义、空值与布尔的字面量,能直接贴回 fixture、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。一键转换避免双源维护,减少手工同步出错的可能。
-
前后端 fixture 与 mock 数据同步
后端用 YAML 编写测试 fixture(Rails、Symfony、Laravel 都常见),前端 Jest、Vitest、Storybook 单元测试需要 JSON 或 JS 对象时,复制粘贴即可,无需自己写转换脚本。
-
TOML 项目迁移与 Cargo、pyproject 编辑
Cargo.toml、pyproject.toml、Hugo config.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 风格的并排视图,比起肉眼比对更容易发现意外覆盖、隐式类型转换或缩进错误带来的副作用。
使用建议
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 这类自定义类型会被忽略或拒绝,防止反序列化漏洞。
- 不提供版本控制、协作、评论、Git 集成等功能,定位是单次转换与检查,复杂协作请配合 Git 仓库与 PR 流程。
- YAML 转 XML、CSV 时可能存在结构上无法完美映射的边界(例如根数组、混合类型列表),工具会给出说明而不是强行序列化。
常见问题
常见疑问集中在多文档处理、anchor 与 merge key、类型陷阱以及数据是否会离开浏览器。
一份 YAML 里有多个文档怎么办?
工具会自动识别用 --- 分隔的多文档,按出现顺序合并成一个 JSON 数组,方便 Kubernetes manifest、Helm 渲染结果、Ansible playbook 等多资源文件一次性查看。也可以在选项里关闭这个行为,只输出第一个文档,专注处理单个资源。
anchor、alias 和 merge key 会被保留吗?
默认会被展开成实际结构。JSON、TOML、XML、JavaScript 对象字面量、PHP 数组等下游格式都不支持引用,展开是更安全的选择,能避免下游工具看到悬空 alias 或缺失字段。如果你只是想检查 anchor 的来源与作用范围,可以在选项里关闭展开,工具会保留原始引用结构供调试使用。
为什么我的 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、密钥 fixture、Cargo.toml 迁移草稿都可以放心粘贴,关闭页面后数据也不会保留。
可以离线使用吗?
首次访问加载完成后,浏览器已经具备解析与转换所需的全部资源,断网情况下仍然可以继续使用。这也意味着哪怕在限制访问外网的内网环境里,也能用同一套工具流程。
更多相关工具
继续处理数据格式工作:从 JSON 反向转回 YAML、整理 JSON 结构、定位嵌套语法错误,或者并排对比两版转换结果,下面这些工具可以串成完整的工作流。