跳到正文
BCBinary Code Translator
菜单

数据工具

JSON 与 YAML 双向转换器

使用项目已有的 js-yaml,在 JSON 与 YAML 之间双向转换;采用受限 JSON 兼容 Schema,并检查危险键、不可表示值和循环别名。

转换仅在浏览器本地进行。YAML 被当作数据解析,不会启用 JavaScript 自定义类型。

如何安全转换 JSON 与 YAML

选择方向、粘贴源文档并执行转换。YAML 侧只接受 JSON 能表达的标量、序列和映射,避免 JavaScript 专用标签和不明确的自动类型。

  1. 需要更适合人工阅读的配置时选择 JSON 转 YAML,需要 API 数据时选择 YAML 转 JSON。
  2. 粘贴一个完整文档;JSON 必须有效,YAML 必须符合本页受限 Schema。
  3. 转换后检查嵌套对象和数组;无循环别名会展开为普通 JSON 数据。
  4. 复制前处理大整数、危险键、自定义标签、循环或不支持值的提示。

案例与预期行为

输入 输出 说明
{"name":"api","ports":[80,443]} name: api ports: - 80 - 443 对象变为映射,数组变为 YAML 序列。
enabled: true retries: 3 { "enabled": true, "retries": 3 } 布尔值和数字保持 JSON 兼容类型。
message: 你好 👋 {"message":"你好 👋"} 中文和 Emoji 在两个格式中都保持 Unicode。
date: 2026-07-29 {"date":"2026-07-29"} 受限 Schema 下,日期样式文本仍是字符串。
payload: !!js/function function(){} 拒绝该 YAML 不允许 JavaScript 专用标签。
__proto__: polluted: true 拒绝危险键 生成 JSON 前会阻止原型相关键。

支持的数据模型与 Schema

转换器使用 js-yaml 的 JSON_SCHEMA,而不是更宽泛的默认 Schema。支持映射、序列、字符串、有限数字、布尔值和 null,与 JSON 基础数据模型一致。这样可避免自动构造 Date、二进制对象、正则表达式或 JavaScript 专用值。

YAML 语言比 JSON 大得多,因此不是所有合法 YAML 都会被本页接受。自定义标签、实现特定类型和无法稳定表示为 JSON 的值会被拒绝。如果目标产品依赖特殊标签,应使用该产品自己的解析器并审查其安全模型。

  • 映射键必须能作为 JSON 字符串键。
  • 不支持非有限数字、函数、Symbol 和 undefined。
  • 日期样式标量在此 Schema 下保持字符串。

映射、序列、锚点与别名

JSON 对象对应 YAML 映射,数组对应序列。属性顺序通常按 JavaScript 对象顺序保留,但不应让业务语义依赖键顺序。YAML 别名可能创建共享引用,转换器会遍历结果并在生成普通 JSON 数据时检查循环。

无循环别名在 JSON 中只能复制被引用的数据,因为 JSON 没有别名语法。自引用或互相引用的图无法用 JSON 表示,会作为循环别名拒绝。JSON 转 YAML 时关闭自动引用生成,避免产生意外锚点。

  • 别名属于 YAML,不属于 JSON。
  • 循环对象会在 JSON.stringify 前被拒绝。
  • 键顺序通常只是展示细节。

原型污染与危险键

__proto__、prototype 和 constructor 在不安全对象合并中经常与原型污染漏洞有关。本工具会在任意层级阻止这些名称,并用无原型对象重建映射,避免转换步骤创建继承属性或修改 Object.prototype。

这只是纵深防御,不能代替最终应用的安全处理。复制后的数据可能被另一个解析器或合并工具以不同方式处理。目标系统仍应采用允许列表 Schema,避免把任意键递归合并到权限对象或应用默认配置。

  • 不要把不可信配置直接深度合并到默认对象。
  • 在目标系统校验允许的字段名和类型。
  • 持续更新 YAML 解析依赖并关注安全公告。

常见转换用途

常见用途包括把 JSON API 示例转为文档或配置草稿,把 YAML 设置转为 API 请求和测试夹具,以及理解缩进、序列和映射在两种语法中的对应关系。

生产配置仍需额外复核:注释可能丢失,引用和引号规则可能改变,目标产品还会有自己的 Schema。不同 YAML 实现的隐式类型规则并不完全一致,最终应使用实际消费软件测试。

  • 把 YAML 草稿转为 JSON 请求。
  • 把 JSON 示例转为更易读的文档。
  • 检查标量实际是字符串、数字、布尔值还是 null。
  • 在进入只支持 JSON 的系统前展开别名。

错误与兼容边界

错误包括 JSON 语法无效、YAML 缩进或引号错误、不支持标签、危险键、不可表示值和循环别名。制表符缩进、冒号后缺空格以及序列标记未对齐很常见。应先修复首个结构错误。

转换不会保留 YAML 注释、锚点名称、标量样式、指令和精确空白,也不处理多个 --- 分隔文档。合并键和产品专用隐式类型可能与目标解析器不同,因此本页适合 JSON 兼容数据交换,不是无损 YAML 格式化器。

  • 注释无法进入 JSON,因此会丢失。
  • !!js/function 等标签会被拒绝。
  • 部署前必须用目标应用验证生成配置。

安全、隐私与资源限制

解析和序列化都发生在当前浏览器标签页,不主动上传或持久化文档。解析器使用受限 Schema,解析后还会检查危险键、不支持对象和循环,不启用可执行 JavaScript 类型。

超大的别名图和深层嵌套仍可能消耗大量内存。不应在高权限工作站中随意处理无大小限制的攻击者文件。本地处理也无法阻止录屏、剪贴板历史和扩展读取,分享结果前应移除凭据。

  • 自建系统接受 YAML 时应设置大小和深度限制。
  • 文本格式不代表天然安全。
  • 密钥和私有配置不要进入截图和工单。

与格式化器和 CSV 工具的区别

JSON 格式化器只改变空白,仍保持 JSON;本页改变序列化语言,因此无法字节级保留原文。JSON 与 CSV 转换器要求表格记录并需要定义表头和嵌套值策略,而 YAML 能保留完整嵌套结构。

需要特殊标签、多文档流或产品合并语义时,应使用产品专用 YAML 校验器;需要字段规则时使用 Schema 校验;仅 JSON 语法错误时先用 JSON 格式化器。选择最窄工具更容易理解错误。

常见问题

YAML 转换会执行代码吗?

不会。本实现用 JSON_SCHEMA,不启用 JavaScript 专用标签,并在解析后拒绝危险键、不支持值和循环。复制到其他系统后仍需再次按目标 Schema 校验。

为什么 YAML 日期会变成 JSON 字符串?

受限 JSON 兼容 Schema 不创建 Date 对象,因此 2026-07-29 保持文本。其他 YAML Schema 可能有不同解释。

会保留 YAML 注释吗?

不会。注释、标量样式和精确空白不属于 JSON 数据模型,解析成 JSON 兼容值后无法恢复。

锚点和别名如何处理?

无循环别名只能在 JSON 中复制数据;循环别名无法序列化,会被拒绝。JSON 转 YAML 也不会主动生成锚点。

为什么拒绝 __proto__ 和 constructor?

这些名称常出现在原型污染攻击中。阻止它们可降低转换阶段风险,但最终应用仍要做 Schema 校验和安全对象处理。

输出可以直接用于生产配置吗?

应把它当作草稿。必须用实际应用、其 Schema 和对应 YAML 实现验证;特殊标签、注释、多文档和隐式类型可能无法保留。

相关开发工具

查看全部工具

Cookie 偏好设置

管理你的 Cookie 偏好。必要 Cookie 无法关闭。

必要 Cookie

必要

用于语言选择、隐私选择和网站基础功能,属于必需项。

Cookie: NEXT_LOCALE

分析 Cookie

可选的分析 Cookie 可帮助我们了解访问情况并改进网站。

Cookie: _ga, _gid, _gat, _clck, _clsk

广告 Cookie

可选的广告 Cookie 可能用于展示相关广告并衡量广告效果。

Cookie: __gads, _gcl_au, IDE