JSON ↔ YAML 互转工具(双向)
在左侧粘贴 JSON 即可在右侧获得 YAML,反之亦然。两个面板均可实时编辑并自动同步。包含格式化 JSON、交换方向和复制按钮,所有转换均在浏览器本地完成,数据不上传。
工作原理
JSON 与 YAML 的历史与用途
JSON(JavaScript Object Notation)由 Douglas Crockford 在2000年代初设计,以 JavaScript 对象字面语法为基础,通过严格的双引号、逗号和括号规则消除歧义,几乎所有编程语言都内置了 JSON 解析器。其简洁性使其迅速取代 XML 成为 Web API 的标准数据格式。
YAML(YAML Ain't Markup Language)由 Clark Evans 和 Ingy döt Net 于2001年创建,目标是提供更适合人类阅读的序列化格式。YAML 1.2 是 JSON 的严格超集,所有有效的 JSON 都是有效的 YAML。YAML 额外支持注释、缩进层级、多行字符串和类型推断,非常适合手动编辑的配置文件。
JSON vs YAML 的使用场景
JSON 适合机器消费的数据场景:REST API、数据库记录、服务间通信和本地存储。其严格语法确保所有语言的解析行为完全一致,是程序间数据交换的首选格式。
YAML 适合人工编辑的配置文件:Docker Compose、Kubernetes 清单、GitHub Actions 工作流、Ansible Playbook 等工具默认使用 YAML。注释功能便于内联文档,缩进式层级比括号更直观,对频繁手动编辑的配置文件而言可读性更高。
格式转换的常见陷阱
YAML 对缩进极为敏感,一个空格的偏移就会改变整体结构,这是最常见的错误来源。此外,YAML 会自动推断类型:裸露的 yes 会被解析为布尔值 true,0755 可能被解析为八进制数。本工具会自动为可能被误解的字符串加引号,以保留原始类型。
特殊字符是另一个挑战。冒号后跟空格(: )、井号(#)、花括号等字符若出现在字符串首位,必须用引号包裹。本工具自动处理这些情况,但不支持锚点、别名和多行块标量等高级 YAML 功能,遇到时会显示清晰的错误提示。
常见问题
›YAML 是 JSON 的超集吗?
是的。YAML 1.2 是 JSON 的严格超集,所有有效的 JSON 文档都是有效的 YAML。反之不然:YAML 的注释、锚点、块标量等功能在 JSON 中没有对应项。
›YAML 主要用于什么场景?
主要用于配置文件:Docker Compose (docker-compose.yml)、Kubernetes 清单、GitHub Actions (.github/workflows)、Ansible Playbook 等。适合开发者手动编辑的文件。
›配置文件用 JSON 还是 YAML 更好?
人工编辑时 YAML 更友好,因为支持注释且视觉层级清晰。机器生成或机器消费的配置用 JSON 更严谨。ESLint、Prettier、tsconfig 等工具通常两种格式都支持。
›YAML 如何处理特殊字符?
包含「冒号+空格」、前导特殊符号({、[、#)或看起来像布尔值/数字的字符串必须加引号。单引号禁用所有转义,双引号使用类似 JSON 的反斜杠转义。本工具会自动在必要处添加引号。
›JSON 转 YAML 会丢失数据吗?
对 JSON 支持的类型(字符串、数字、布尔值、null、对象、数组),转换是无损的。为防止 YAML 类型推断导致数据变形,本工具会对可能被误解的字符串自动加引号。
›Python 中如何将 YAML 转为 JSON?
使用 PyYAML:import yaml, json; data = yaml.safe_load(open('file.yaml')); print(json.dumps(data, indent=2))。使用 safe_load 可避免执行任意 YAML 标签,更安全。
›Node.js 中如何将 JSON 转为 YAML?
可以使用 js-yaml 包:const yaml = require('js-yaml'); const obj = JSON.parse(fs.readFileSync('file.json')); console.log(yaml.dump(obj))。零依赖方案则需手写序列化器,本工具即采用此方式。
›哪些 YAML 功能不被支持?
本工具不支持:锚点(&name)、别名(*name)、类型标签(!!int 等)、多行块标量(| 和 >)、文档分隔符(---)。这些功能在实际 YAML 中占比不足 5%。如需支持,请使用完整的 YAML 库。
相关工具
最后更新: